编译优化生成坏代码
(金庆的专栏)
以下代码来自: 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)