6

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

4

3 に答える 3

4

に使用-fstrict-aliasingg++ます。-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 に答える