在g ++中启用严格别名警告

时间:2011-12-18 15:40:52

标签: c++ visual-c++ gcc strict-aliasing

在g ++中启用严格别名警告的正确方法是什么? VC ++ 10是否实现了这些规则?

3 个答案:

答案 0 :(得分:4)

-fstrict-aliasing使用g++。我还使用-Wstrict-aliasing=2查看与可能违反严格别名规则相关的警告。

答案 1 :(得分:3)

它们由-O2自动启用,因为它需要使用它们来执行某些优化。绝对将它与警告(-Wall完成技巧)结合起来,以确保您没有构建潜在的错误代码。否则,您可以使用另一个答案中显示的-fstrict-aliasing来启用它们。

然而,我不确定VC ++ 10。

答案 2 :(得分:1)

VC ++ 10使用/ O1及更高版本启用严格别名规则。我在here的“严格混淆规则的好处”一章中使用了测试程序(计数值为6)。并获得以下asm代码。你可以看到b的负载只进行一次。

00A910AE  movzx       edx,word ptr [edx+2]  //Load of b
00A910B2  xor         eax,eax  
00A910B4  xor         ecx,ecx  
00A910B6  add         dword ptr [esp+eax*4+34h],edx  //Loop start
00A910BA  add         eax,1  
00A910BD  adc         ecx,edi  
00A910BF  jne         main+76h (0A910C6h)  
00A910C1  cmp         eax,6  
00A910C4  jb          main+66h (0A910B6h)  //Loop end

但看起来没有办法启用违反此规则的警告。