2011-12-18 2 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 이상으로 엄격한 별칭 지정 규칙을 사용합니다. 나는 '엄청난 앨리어싱 규칙에 따른 이점'장의 테스트 프로그램 (카운트 값 6)을 here으로 사용합니다. 그리고 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 

그러나이 규칙을 위반하는 경고가 표시되지 않는 것처럼 보입니다.