2010-12-30 7 views
11

शीर्षक यह सब कहता है। #pragma once को C++ 0x के लिए मानकीकृत किया गया है? मैं किसी भी कंपाइलर को नहीं जानता जो लगभग हमेशा समान अर्थशास्त्र और नाम के साथ इसे कार्यान्वित नहीं करता है।क्या #pragma एक बार इसे C++ 0x में बना दिया था?

+1

इसे [ग्वाचा में '#pragma एक बार'] के लिए देखें (http://stackoverflow.com/questions/787533/is-pragma-once-a-safe-include-guard/1946730#1946730) – Motti

+0

"लगभग "? आप इसे विभिन्न कंपाइलरों में उपयोग कर रहे हैं जो समान रूप से इसका इलाज नहीं करते हैं? या, आप इसके द्वारा अन्य नाम क्या जानते हैं? (यह स्पष्ट नहीं है कि कौन सा "लगभग" लागू होता है, या दोनों?) –

उत्तर

13

सभी #pragma निर्देश कार्यान्वयन को परिभाषित तरीके से व्यवहार करने का कारण बनते हैं।

यह सी ++ 03 और नवीनतम सी ++ 0x ड्राफ्ट (n3225.pdf) के बीच नहीं बदला है। गार्ड शामिल करें पोर्टेबल विकल्प हैं।

+1

मुझे पता है कि गार्ड पोर्टेबल विकल्प हैं लेकिन मैंने सोचा कि इसे किसी भी तरह मानकीकृत किया जा सकता था। – Klaim

+0

ध्यान दें कि नवीनतम ड्राफ्ट n3225.pdf है। –

+1

@P्रासून: तो यह है। मेरी रक्षा में, डब्लूजी 21 वेब पेज पर "वर्तमान मसौदा" अद्यतित नहीं है। http://www.open-std.org/jtc1/sc22/wg21/ –

6

सूर्य सी ++ कंपाइलर (सोलारिस) इसे लागू नहीं करता है। और नहीं, यह सी ++ 0x ड्राफ्ट में नहीं है।

+0

+1। – Klaim

-2

#ifdef का उपयोग करके कार्यान्वित करना भी छोटा है। नए संस्करण के लिए मार्गदर्शक प्रिंसिपल क्या है? जो कुछ भी आप चाहते हैं उसे लागू करें और रसोईघर सिंक करें या आपको स्वयं ऐसा करने के लिए न्यूनतम टूल दें?

+8

आप बिंदु खो रहे हैं। मानकीकरण का एक बड़ा हिस्सा सामान्य अभ्यास को मानक-अनुरूप उपकरणों के लिए न्यूनतम उपलब्ध बनाना है। '#pragma एक बार' कई कंपाइलर्स द्वारा प्रदान किया गया है और यह साबित हुआ है। मानक समकक्ष एक कीवर्ड उपयोगी होगा। – Klaim

+6

में गार्ड शामिल हैं जो आपको (एक और एकमात्र वैश्विक) प्रीप्रोसेसर नेमस्पेस में नाम चुनने के लिए मजबूर करते हैं। जो दर्द है। दी गई है, ज्यादातर परियोजनाओं को कहीं मैक्रोज़ की आवश्यकता होती है, इसलिए वे किसी भी तरह टकराव के बिना प्रीप्रोसेसर पहचानकर्ताओं को चुनने के मुद्दे से निपटते हैं। फिर भी यह एक दर्द है, और मैं अभी भी #ifdef FILENAME_H कोड के चारों ओर उड़ने वाला बहुत कुछ देखता हूं। जो एआरजीएच है। सबसे समझदार परियोजनाएं PROJECTNAME_FILENAME_SOMESUFFIX का उपयोग करती हैं, जो ठीक है, लेकिन अच्छी तरह से ...। आईएमओ #pragma एक बार बेहतर समाधान है। –