【发布时间】:2014-04-30 14:42:42
【问题描述】:
根据优化级别,输出不同如下:
意外输出:
$ gcc -Wall -O3 otest.c -o otest
$ otest
*x: 0
y: 2048.899902
y: 0.000000
预期输出:
$ gcc -Wall -O2 otest.c -o otest
$ otest
*x: 45000e66
y: 0.000000
y: 2048.899902
源代码:
#include <stdio.h>
int main(void)
{
float y = 2048.9;
void *p = &y;
unsigned int *x = p;
printf(" *x: %x \n",*x);
*x = 0;
printf(" y: %f \n",y);
*x = 0x45000e66;
printf(" y: %f \n",y);
return 0;
}
gcc 版本是 4.2.1。
我是否遗漏了任何重要的指令?
【问题讨论】:
-
-fno-strict-aliasing -
@MarcGlisse 甚至不建议这样做。 永远。
-
@MarcGlisse 是的,但您的评论表明这是一个解决方案。不是。
-
@ole 如果不清楚,评论中的随机词不是“解决方案”或“建议”,它是关于在搜索引擎中输入什么以获得更多信息的建议信息并了解您的代码在哪些方面是错误的。
-
联合在这样的别名情况下更好
标签: c gcc optimization