编译优化生成坏代码

来源:互联网 发布:cookie flash.js 编辑:程序博客网 时间:2024/05/17 03:08
编译优化生成坏代码

(金庆的专栏)

以下代码来自: 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)


原创粉丝点击