Sto cercando di compilare il seguente su gcc con -pedantic-errors -pedantic -Wall -O2
Strict avvertimento aliasling su gcc 4.6.1 bug
#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();
}
Ma io non vedo alcun severi avvertimenti di aliasing. Ho anche provato ad abilitare
-fstrict-aliasing
-Wstrict-aliasing
ma ancora nessun avviso. È un bug?
Quello che stai cercando di fare non ha alcun senso. Perché non fare semplicemente '* pi = 0'? – Pubby
@Pubby: Presumibilmente questo è solo un caso di prova minimamente forzato ... –
Per prima cosa, le regole di aliasing consentono conversioni da e verso 'char *'. In secondo luogo, g ++ non promette di avvisare, dice solo che proverà. Se lo cambi per convertire direttamente in 'uint16_t' e hai' -Wintict-aliasing = 1' ti darà un avvertimento. – Omnifarious