2011-12-18 19 views
6

g ++で厳密なエイリアシング警告を有効にする正しい方法は何ですか? VC++ 10はこれらのルールを実装していますか?g ++の厳密なエイリアシング警告を有効にする

+3

ルールは常に「有効」です。あなたがそれらを壊しているときにあなたに伝える警告だけがオプションです。 –

答えて

4

g++-fstrict-aliasingを使用してください。私も-Wstrict-aliasing=2を使用して、厳密なエイリアシング規則の違反の可能性に関する警告を参照してください。

3

-O2によっていくつかの最適化を行う必要があるため、自動的に有効になります。間違いなく、バグの可能性があるコードを構築していないことを確認するために警告(-Wall)を組み合わせてください。そうでない場合は、-fstrict-aliasingを別の回答のように使用して有効にすることができます。

ただし、VC++ 10についてはわかりませんが、

1

VC++ 10は、/ O1以上の厳密なエイリアシング規則を有効にします。私はhereの「強大なエイリアシングルールの恩恵」章のテストプログラム(カウント値6)を使用します。そして、asmコードに従ってください。あなたは、bの負荷が1回だけ行われることが分かります。

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 

しかし、このルールを破るための警告を有効にする方法はないようです。

関連する問題