您的位置:首页 > 编程语言

编译优化生成坏代码

2011-07-13 10:37 176 查看
编译优化生成坏代码

(金庆的专栏)

以下代码来自: http://www.gossamer-threads.com/lists/python/dev/497519
#include <stdio.h>

long f(int *a, long *d){

(*d)++;

*a = 5;

return *d;

}

int main()

{

long d = 0;

printf("%ld\n", f((int*)&d, &d));

return 0;

}

用gcc4.1作测试.

g++ main.cpp 结果为5.

打开编译优化选项-O2,

g++ -O2 main.cpp 结果为1.

g++ -O2 main.cpp -Wstrict-aliasing

就会报警告: 提领类型双关的指针将破坏强重叠规则.

强重叠就是strict-aliasing.

先转为void*, 再转为int*就不会有警告了.

f((int*)((void*)&d), &d)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: