निष्काम ध्वज क्या करता है?


121

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

त्रुटि: अस्थायी का पता [-सुविधा]

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

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

जवाबों:


146

डॉक्स से अधिकार :

-fpermissive
त्रुटियों से चेतावनियों के लिए गैर-अनुरूपता कोड के बारे में कुछ निदानों को डाउनग्रेड करें। इस प्रकार, उपयोग -fpermissiveकरने से कुछ गैर-संकलित कोड को संकलित करने की अनुमति मिलेगी।

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


5
मैं उद्धरण मैनुअल से अधिक जानकारी की उम्मीद करता हूं + "इसका उपयोग तब तक न करें जब तक कि आप यह नहीं जानते कि आप क्या कर रहे हैं" उच्चतम मतदान जवाब से। मुझे इसके लिए गूगल नहीं करना पड़ेगा। गैर-अनुरूपता कोड के कौन से मामले बिलकुल डाउनग्रेड किए गए हैं?
जोहान्स_लला

नॉन-कॉनफ़ॉर्मेंट कोड डाउनग्रेड नहीं है, लेकिन डायग्नोस्टिक्स त्रुटियों से चेतावनी के लिए है। एक उदाहरण प्रश्नकर्ता द्वारा दिया गया है। यदि आपको नहीं पता कि किनारे के मामले क्या हो सकते हैं, तो आपको इसका उपयोग करने पर विचार नहीं करना चाहिए।
cli_hlt

2
सॉरी यार, कोई अपराध नहीं, लेकिन सलाह जैसे "कुछ मत करो अगर आपको निहितार्थ नहीं पता है" तुच्छ है और हर सवाल पर फिट बैठता है और कोई जवाब नहीं देता है।
जोहान्स_लला

3
.. और क्षमा करें, लेकिन केवल विस्तृत विवरण के बिना मैनुअल को उद्धृत करना सहायक नहीं है। खासकर ऐसे मामले में जहां मैनुअल बहुत विरल है।
johannes_lalala 19

50

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

-fpermissive
त्रुटियों से चेतावनियों के लिए गैर-अनुरूपता कोड के बारे में कुछ निदानों को डाउनग्रेड करें। इस प्रकार, का उपयोग कर-fpermissiveकरने से कुछ गैर-संकलित कोड को संकलित करने की अनुमति मिलेगी।


18

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


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

8

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.