में सख्त एलियासिंग चेतावनियों को सक्षम करना g ++ में सख्त एलियासिंग चेतावनियों को सक्षम करने का सही तरीका क्या है? क्या वीसी ++ 10 उन नियमों को लागू करता है?g ++
g ++
उत्तर
-fstrict-aliasing
g++
के लिए उपयोग करें। सख्त एलियासिंग नियमों के संभावित उल्लंघनों से संबंधित चेतावनियों को देखने के लिए मैं -Wstrict-aliasing=2
का भी उपयोग करता हूं।
वे स्वचालित रूप से -O2
द्वारा सक्षम हैं क्योंकि इसे कुछ अनुकूलन करने के लिए उपयोग करने की आवश्यकता है। निश्चित रूप से चेतावनी के साथ इसे गठबंधन करें (-Wall
चाल करता है) यह सुनिश्चित करने के लिए कि आप संभावित रूप से छोटी गाड़ी कोड नहीं बना रहे हैं। अन्यथा आप -fstrict-aliasing
का उपयोग कर सकते हैं जैसा कि उन्हें सक्षम करने के लिए किसी अन्य उत्तर में देखा गया है।
हालांकि मुझे वीसी ++ 10 के बारे में निश्चित नहीं है।
वीसी ++ 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
लेकिन ऐसा लगता है कि इस नियम को तोड़ने के लिए चेतावनी को सक्षम करने का कोई तरीका नहीं है।
नियम हमेशा "सक्षम" होते हैं। केवल चेतावनी जो आपको बताती है कि जब आप उन्हें तोड़ रहे हैं तो वैकल्पिक है। –