0
点赞
收藏
分享

微信扫一扫

编译优化生成坏代码


编译优化生成坏代码

(金庆的专栏)

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

举报

相关推荐

0 条评论