[英]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.