Sulla base di questo ottimo post sul blog, The Strict Aliasing Situation is Pretty Bad, ho messo il pezzo di codice online per te di provarlo:C dà output diverso in base al livello di ottimizzazione (nuovo esempio)
http://cpp.sh/9kht (uscita cambia tra - O0 e -O2)
#include <stdio.h>
long foo(int *x, long *y) {
*x = 0;
*y = 1;
return *x;
}
int main(void) {
long l;
printf("%ld\n", foo((int *)&l, &l));
}
c'è una sorta di comportamento indefinito qui?
Cosa succede internamente quando scegliamo il livello -O2?
Questo è in realtà un incredibile esempio di violazione della regola di aliasing di tipo. Lo farò il mio duplicato canonico. – SergeyA