2012-01-12 25 views
84

मैं बस सोच रहा हूं कि -fpermissive ध्वज g ++ कंपाइलर में क्या करता है? मैं हो रही है:fpermissive ध्वज क्या करता है?

error: taking address of temporary [-fpermissive]

जो मैं संकलक को -fpermissive ध्वज देकर हल कर सकते हैं।

संपादित: मैं सिर्फ पाया क्या अस्थायी पते त्रुटि हिस्सा पैदा कर रहा था! मैं अभी उस हिस्से को ठीक करने जा रहा हूं।

उत्तर

106

the docs से अधिकार:

-fpermissive
Downgrade some diagnostics about nonconformant code from errors to warnings. Thus, using -fpermissive will allow some nonconforming code to compile.

निष्कर्ष

: उसका उपयोग नहीं करते जब तक आप जानते हैं कि आप क्या कर रहे हैं!

38

-fpermissive flag, कुछ चीजें हैं जो वास्तव में त्रुटियाँ हैं (लेकिन कुछ compilers द्वारा अनुमति दी जाती है) चेतावनी के रूप में रिपोर्ट करने के लिए भले ही यह भाषा के नियमों के अनुरूप नहीं है संकलित करने के लिए कोड की अनुमति के लिए संकलक का कारण बनता है। आपको वास्तव में अंतर्निहित समस्या को ठीक करना चाहिए। सबसे छोटा, संकलित कोड नमूना पोस्ट करें जो समस्या का प्रदर्शन करता है।

-fpermissive
Downgrade some diagnostics about nonconformant code from errors to warnings. Thus, using -fpermissive will allow some nonconforming code to compile.

13

जब आपने भाषा मानक द्वारा अनुमति नहीं दी है (और इसलिए वास्तव में अच्छी तरह से परिभाषित व्यवहार नहीं हो सकता है, जो ऐसा करने के लिए पर्याप्त कारण नहीं है) लेकिन पर नक्शा होता है तरह निष्पादन योग्य अगर संकलन इंजन के लिए बेवकूफी खिलाया जाता है, तो -fpermissive बस इस त्रुटि संदेश को रोकने के बजाय ऐसा करेगा। कुछ मामलों में, कार्यक्रम तब मूल रूप से व्यवहार करेगा जैसा आप मूल रूप से चाहते थे, लेकिन आपको निश्चित रूप से उस पर भरोसा नहीं करना चाहिए जब तक कि आपके पास कुछ अन्य समाधान का उपयोग न करने के लिए कुछ विशेष कारण हैं।

+1

भाषा मानक द्वारा अनुमत कुछ भी अभी भी परिभाषित किया जा सकता है। वास्तव में लगभग हर कंपाइलर में अच्छी तरह से परिभाषित एक्सटेंशन हैं। यह नहीं कह रहा है कि यह अनुमति है हालांकि अनुमति के सभी उदाहरणों के साथ – MikeMB

4

यदि आप इसके लिए वास्तविक दुनिया के उपयोग के मामले चाहते हैं, तो एक्स विंडोज के एक पुराने संस्करण को संकलित करने का प्रयास करें - कहें, या तो XFree86 या XOrg 2004 के आसपास से, विभाजन के ठीक नीचे - एक "आधुनिक" (खांसी का उपयोग करके)) जीसीसी का संस्करण, जैसे 4.9.3।

आप बिल्डिंग CFLAGS को "-ansi" और "-pedantic" दोनों निर्दिष्ट करते हैं। सिद्धांत रूप में, इसका मतलब है, "अगर कुछ भी भाषा की कल्पना का थोड़ा सा उल्लंघन करता है तो उड़ाएं"। व्यावहारिक रूप से, जीसीसी की 3.x श्रृंखला में उस तरह की चीजें बहुत ज्यादा नहीं थीं, और इसे 4.9.3 के साथ निर्मित करने से ग्राउंड में धूम्रपान छेद छोड़ दिया जाएगा जब तक आप CFLAGS और BOOTSTRAPCFLAGS को "-fpermissive" पर सेट न करें।

कि झंडा का उपयोग करना, उन सी फ़ाइलों के सबसे वास्तव में निर्माण, आप संस्करण पर निर्भर मलबे lexer उत्पन्न होगा पर जाने के लिए मुक्त छोड़ देगा। =]

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