सी ++ (और सी) में हमारे पास #pragma
निर्देश है जो मूल रूप से कार्यान्वयन प्रभावों को परिभाषित करता है। हालांकि, निर्देश क्या कर सकते हैं इसकी कोई सीमा है? (ध्यान दें कि मैं क्या मानक की अनुमति देता है, क्या असली compilers वास्तव में के बारे में नहीं के बारे में पूछ रहा हूँ।)मानक #pragma करने की अनुमति देता है?
#pragma
ऐसा कर सकते हैं क्या मैं कुछ कर रहा हूँ:
- कई संकलन एक विकल्प का चयन करने की अनुमति दें जो सभी परिणाम वैध सी ++ में हैं - उदाहरण के लिए, कई उपलब्ध एबीआई में से एक का चयन करें, या कुछ कार्यान्वयन परिभाषित विकल्पों को स्विच करें।
मुझे लगता है कि होगा क्या अनुमति दी है, लेकिन यकीन है कि नहीं कर रहा हूँ:
संकलक एक नैदानिक जारी करने के बिना अन्यथा अवैध कोड को स्वीकार करने की अनुमति दें (उदाहरण के लिए, एक संकलक एक नया बनाया समर्थन करने के लिए तय कर सकते हैं -इन प्रकार
long long long
, लेकिन का उपयोग कर कि एक नैदानिक जारी करने के लिए होता है किसी भी कोड;। इस नैदानिक तो जैसे#pragma long long long
साथ दबा दिया जा सकता हैसंकलक अन्यथा कानूनी कोड को अस्वीकार करने की अनुमति दें, उदाहरण के लिए वहाँ एकहो सकता है 210 जो संकलक को कुछ पुस्तकालय कार्यों और/या भाषा संरचनाओं के उपयोग के रूप में ध्वजांकित करने का कारण बनता है जिसे असुरक्षित माना जाता है।
क्या मैं वास्तव में संदेह की अनुमति दी है, लेकिन यकीन नहीं है या तो:
- संकलक, कुछ अलग (उदाहरण के लिए करने के लिए कानूनी कोड के शब्दों को बदलने लगता है कि एक संकलक विक्रेता यह माना करने की अनुमति दें एक अच्छा विचार है, तो
for
हालत (के रूप मेंdo
में ...while
) एक postcondition थे, और#pragma for postcondion
परिभाषितfor
तदनुसार का अर्थ स्विच करने के लिए।
मुझे बाद में संदेह करने का कारण यह है कि संकलक को किसी भी प्रज्ञा को अनदेखा करने की इजाजत नहीं है, और इसलिए प्रज्ञा से अर्थशास्त्र में एक बदलाव से एक ही कार्यक्रम के विभिन्न कंप्यूटर्स पर अलग-अलग अर्थशास्त्र हो सकते हैं।
हालांकि, मानक वास्तव में क्या अनुमति देता है? और क्या ऐसी चीजें हैं जिनकी अनुमति है, लेकिन जो ऊपर मेरी सूची द्वारा कवर नहीं हैं?
मुझे संदेह है कि लंबे समय तक लंबी सामग्री की अनुमति होगी: 'प्रज्ञा' को किसी भी तरह से कंपाइलर्स द्वारा अनदेखा किया जा सकता है। –
@Alexandre निश्चित रूप से, लेकिन मैं यह देखने में असफल रहा कि वह किस उदाहरण के लिए एक समस्या है। यदि कंपाइलर 'लंबे समय तक लंबा' समर्थित है, तो यह 'प्रज्ञा' का भी समर्थन करेगा जो इसके उपयोग पर जारी चेतावनी को दबाएगा। इसके अलावा, यह एक और सामान्य चेतावनी दमन प्रज्ञा से अलग कैसे है? –