【发布时间】:2016-03-15 16:32:21
【问题描述】:
根据这篇非常好的博文The Strict Aliasing Situation is Pretty Bad,我把这段代码放到网上供你测试:
http://cpp.sh/9kht(输出在 -O0 和 -O2 之间变化)
#include <stdio.h>
long foo(int *x, long *y) {
*x = 0;
*y = 1;
return *x;
}
int main(void) {
long l;
printf("%ld\n", foo((int *)&l, &l));
}
这里是否存在某种未定义的行为?
当我们选择 -O2 级别时,内部发生了什么?
【问题讨论】:
-
这实际上是一个违反类型别名规则的惊人例子。我会把它作为我的规范副本。
标签: c gcc optimization compilation