作为更大程序的一部分,我使用以下代码从文件中读取数据。
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
谷歌我发现了两个正交的答案:
对比
最后,我不想忽略警告。你会推荐什么?
[更新]我用实际功能替换了玩具示例。