g ++

2011-12-18 13 views
6

में सख्त एलियासिंग चेतावनियों को सक्षम करना g ++ में सख्त एलियासिंग चेतावनियों को सक्षम करने का सही तरीका क्या है? क्या वीसी ++ 10 उन नियमों को लागू करता है?g ++

+3

नियम हमेशा "सक्षम" होते हैं। केवल चेतावनी जो आपको बताती है कि जब आप उन्हें तोड़ रहे हैं तो वैकल्पिक है। –

उत्तर

4

-fstrict-aliasingg++ के लिए उपयोग करें। सख्त एलियासिंग नियमों के संभावित उल्लंघनों से संबंधित चेतावनियों को देखने के लिए मैं -Wstrict-aliasing=2 का भी उपयोग करता हूं।

3

वे स्वचालित रूप से -O2 द्वारा सक्षम हैं क्योंकि इसे कुछ अनुकूलन करने के लिए उपयोग करने की आवश्यकता है। निश्चित रूप से चेतावनी के साथ इसे गठबंधन करें (-Wall चाल करता है) यह सुनिश्चित करने के लिए कि आप संभावित रूप से छोटी गाड़ी कोड नहीं बना रहे हैं। अन्यथा आप -fstrict-aliasing का उपयोग कर सकते हैं जैसा कि उन्हें सक्षम करने के लिए किसी अन्य उत्तर में देखा गया है।

हालांकि मुझे वीसी ++ 10 के बारे में निश्चित नहीं है।

1

वीसी ++ 10 सख्त एलियासिंग नियम/ओ 1 और ऊपर के साथ सक्षम बनाता है। मैं here के 'स्ट्राइक एलिसाइजिंग नियम के लिए लाभ' अध्याय में परीक्षण कार्यक्रम (गिनती मूल्य 6 के साथ) का उपयोग करता हूं। और एएसएम कोड निम्नलिखित प्राप्त करें। आप देख सकते हैं कि बी का भार केवल एक बार किया जाता है।

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 

लेकिन ऐसा लगता है कि इस नियम को तोड़ने के लिए चेतावनी को सक्षम करने का कोई तरीका नहीं है।

संबंधित मुद्दे