金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
编译优化生成坏代码

(金庆的专栏)

以下代码来自: 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)
posted on 2011-07-13 10:40 金庆 阅读(932) 评论(0)  编辑 收藏 引用 所属分类: 1. C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理