La differenza è spiegata nel GCC manuals
Il __attribute__ ((pure))
significa che la funzione non ha effetti collaterali e il valore restituito dipende dalle argomentazioni e lo stato delle variabili globali. Pertanto è sicuro che l'ottimizzatore elide alcune chiamate ad esso, se gli argomenti sono gli stessi e lo stato dei globali non cambia tra le chiamate.
Il __attribute__ ((const))
significa che il valore di ritorno è unicamente una funzione degli argomenti, e se uno qualsiasi degli argomenti sono puntatori, quindi i puntatori non devono essere dereferenziati.
Una funzione const
è sempre pure
.
Esempi di const
funzioni sarebbero le funzioni matematiche da <math.h>
: sqrt
, exp
, ecc (anche se potrebbe essere soggetto a modalità di arrotondamento).
Esempi di pure
ma non const funzioni sarebbero tali funzioni strlen
- come dereferenzia il puntatore passato in
fonte
2018-01-01 15:51:07
[Questo] (https://gcc.gnu.org/onlinedocs/gcc-4.0.. 0/gcc/Function-Attributes.html) può aiutare. – haccks