So che sizeof
non valuta mai il suo operando, tranne nel caso specifico in cui detto operando è un VLA. Oppure, I pensato lo sapevo.VLA e effetti collaterali nell'operando sizeof
void g(int n) {
printf("g(%d)\n", n);
}
int main(void) {
int i = 12;
char arr[i]; // VLA
(void)sizeof *(g(1), &arr); // Prints "g(1)"
(void)sizeof (g(2), arr); // Prints nothing
return 0;
}
Cosa sta succedendo?
Nel caso, questo è compilato con GCC 5.1 su Coliru.
Per una volta, un buon caso per rispondere alla tua stessa domanda. – Bathsheba
Si potrebbe voler aggiungere questo da qualche parte: * 6.5.3.4 Gli operatori sizeof e _Alignof Se il tipo dell'operando è un tipo di array di lunghezza variabile , l'operando viene valutato; altrimenti, l'operando non viene valutato e il risultato è una costante intera di *, pertanto i lettori di febbre verranno confusi. – this
@this Grazie :) – Quentin