g ++で厳密なエイリアシング警告を有効にする正しい方法は何ですか?VC ++ 10はそれらのルールを実装していますか?
1265 次
3 に答える
4
に使用-fstrict-aliasing
しg++
ます。-Wstrict-aliasing=2
また、厳密なエイリアシングルールの違反の可能性に関連する警告を確認するためにも使用します。
于 2011-12-18T15:45:28.977 に答える
3
-O2
いくつかの最適化を行うためにそれらを使用する必要があるため、それらは自動的に有効になります。-Wall
潜在的にバグのあるコードを作成していないことを確認するために、間違いなく警告と組み合わせてください(トリックを行います)。それ以外の場合は-fstrict-aliasing
、別の回答に見られるように使用してそれらを有効にすることができます。
ただし、VC++10 についてはわかりません。
于 2011-12-18T15:56:36.253 に答える
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
しかし、このルール違反の警告を有効にする方法がないようです。
于 2011-12-18T17:16:00.437 に答える