estoy tratando de compilar el siguiente en gcc con -pedantic-errors -pedantic -Wall -O2
advertencia aliasling estricto de gcc 4.6.1 fallo
#include <iostream>
void reset_uint32(uint32_t* pi)
{
char* c = (char*)(pi);
uint16_t* j = (uint16_t*)(c); // warning?
j[0] = 0;
j[1] = 0;
}
void foo()
{
uint32_t i = 1234;
reset_uint32(&i);
}
int main() {
foo();
}
Pero aún no hay advertencias aliasing estrictas. También he intentado habilitar
-fstrict-aliasing
-Wstrict-aliasing
pero todavía no hay advertencias. ¿Es esto un error?
Lo que estás tratando de hacer no tiene ningún sentido. ¿Por qué no simplemente '' pi = 0'? – Pubby
@Pubby: Presumiblemente, este es solo un caso de prueba mínimo artificial ... –
En primer lugar, las reglas de alias permiten las conversiones desde y hacia 'char *'. En segundo lugar, g ++ no promete advertir, solo dice que lo intentará. Si lo cambia para convertir directamente a 'uint16_t' y tiene' -Wstrict-aliasing = 1' le dará una advertencia. – Omnifarious