C · Avançado · Inglês · Técnico
strict aliasing
Regra segundo a qual um objeto só pode ser acessado por lvalues de tipo compatível ou por char. O compilador a usa para assumir que ponteiros de tipos diferentes não se sobrepõem.
Onde usar
Ler um float como int via cast de ponteiro viola a regra e dá comportamento indefinido sob -O2. A saída segura é memcpy ou uma union.
Em código
float f = 1.0f;
uint32_t bits;
memcpy(&bits, &f, sizeof bits); // seguro
// *(uint32_t *)&f violaria a regraExemplos
That pointer cast breaks strict aliasing.
Esse cast de ponteiro quebra o strict aliasing.
With -O2, strict aliasing lets the compiler reorder these loads.
Com -O2, o strict aliasing deixa o compilador reordenar essas leituras.
Cuidado
Desligar a regra com -fno-strict-aliasing só mascara o bug; o certo é corrigir o acesso, normalmente com memcpy.