Qualcuno può chiarire se (e perché) una funzione può essere attribuita pure
o const
se ha un parametro puntatore.Funzioni GCC pure/const che accettano un argomento del puntatore
Secondo il GCC documentation:
Alcuni degli esempi comuni di funzioni pure sono strlen o memcmp.
Il punto centrale di una funzione pura è che deve essere chiamato solo una volta per gli stessi parametri, vale a dire il risultato può essere memorizzato nella cache se il compilatore pensa che sia adatta a farlo, ma come fa questo lavoro per memcmp?
ad esempio:
char *x = calloc(1, 8);
char *y = calloc(1, 8);
if (memcmp(x, y, 8) > 0)
printf("x > y\n");
x[1] = 'a';
if (memcmp(x, y, 8) > 0)
printf("x > y\n");
I parametri per la seconda chiamata a memcmp sono identici alla prima (i puntatori puntano allo stesso indirizzo), come non al compilatore di utilizzare il risultato della prima chiamare, se memcmp
è puro?
Nel mio caso, voglio passare una matrice a una funzione pura e calcolare il risultato in base alla sola matrice. Qualcuno mi rassicura che questo è ok, e che quando i valori nella matrice cambiano ma l'indirizzo no, la mia funzione verrà chiamata correttamente.
Grazie per il collegamento dell'articolo, interessante. Ma la mia domanda riguardava specificamente gli argomenti del puntatore alle funzioni pure. – jsj
@ trideceth12 la stessa analisi si applica anche ai puntatori. –
Quindi cosa succede se 8 e 1 non sono noti al momento della compilazione? Per esempio. sono variabili? – Kata