I have the following code:
struct A
{
short b;
};
struct B
{
double a;
};
void foo (struct B* src)
{
struct B* b = src;
struct A* a = (struct A*)src;
b->a = sin(rand());
if(a->b == rand())
{
printf("Where are you strict aliasing warnings?\n");
}
}
我正在使用以下命令行编译代码:
gcc -c -std=c99 -Wstrict-aliasing=2 -Wall -fstrict-aliasing -O3 foo.c
我正在使用GCC 4.5.0。我期望编译器会输出警告:
warning: dereferencing type-punned pointer will break strict-aliasing rules
但事实并非如此。我可以让警告在其他情况下打印出来,但我想知道为什么在这种情况下它没有打印出来。这不是一个明显的违反严格别名规则的例子吗?
... -Wstrict-aliasing=1 ...
产生警告。 - pmg