簡體   English   中英

在g ++中啟用嚴格別名警告

[英]Enabling strict aliasing warnings in g++

在g ++中啟用嚴格別名警告的正確方法是什么? VC ++ 10是否實現了這些規則?

g++使用-fstrict-aliasing 我還使用-Wstrict-aliasing=2來查看與可能違反嚴格別名規則相關的警告。

它們由-O2自動啟用,因為它需要使用它們來執行某些優化。 絕對將它與警告( -Wall訣竅)結合起來,以確保您沒有構建潛在的錯誤代碼。 否則,您可以使用-fstrict-aliasing如另一個答案所示,以啟用它們。

但是我不確定VC ++ 10。

VC ++ 10使用/ O1及更高版本啟用嚴格別名規則。 我使用的測試程序(與計數值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

但看起來沒有辦法啟用違反此規則的警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM