Różnica jest wyjaśnione w GCC manuals
The __attribute__ ((pure))
oznacza, że funkcja nie ma skutków ubocznych i wartość zwracana zależy od argumentów i stanu zmiennych globalnych. Dlatego optymalizator może bezpiecznie przesyłać niektóre wywołania, jeśli argumenty są takie same, a stan globaliów nie zmieniał się między wywołaniami.
__attribute__ ((const))
oznacza, że wartość zwracana jest wyłącznie funkcją argumentów, a jeśli któryś z argumentów są wskaźnikami, wówczas wskaźniki nie musi być dereferencjonowane.
Funkcja jest zawsze pure
.
Przykłady const
funkcji byłoby funkcje matematyczne z <math.h>
: sqrt
, exp
, itd. (Choć mogą one podlegać trybach zaokrągleń).
Przykłady pure
ale const funkcji będzie takie funkcje jak strlen
- jak to dereferences wskaźnik przekazywany w
[W] (https://gcc.gnu.org/onlinedocs/gcc-4.0.. 0/gcc/Function-Attributes.html) może pomóc. – haccks