次のコードを使用して、より大きなプログラムの一部としてファイルからデータを読み取りました。
double data_read(FILE *stream,int code) {
char data[8];
switch(code) {
case 0x08:
return (unsigned char)fgetc(stream);
case 0x09:
return (signed char)fgetc(stream);
case 0x0b:
data[1] = fgetc(stream);
data[0] = fgetc(stream);
return *(short*)data;
case 0x0c:
for(int i=3;i>=0;i--)
data[i] = fgetc(stream);
return *(int*)data;
case 0x0d:
for(int i=3;i>=0;i--)
data[i] = fgetc(stream);
return *(float*)data;
case 0x0e:
for(int i=7;i>=0;i--)
data[i] = fgetc(stream);
return *(double*)data;
}
die("data read failed");
return 1;
}
今、私は使用するように言われ、-O2
次のgcc警告が表示されます:
warning: dereferencing type-punned pointer will break strict-aliasing rules
Googleing私は2つの直交する答えを見つけました:
vs
結局、私は警告を無視したくありません。あなたは何をお勧めします?
【更新】おもちゃの例を実関数に置き換えました。