यह कितना पोर्टेबल अपने कार्यक्रम होने की उम्मीद है पर निर्भर करता है शामिल हैं।
जब तक आप एक प्रोग्राम लिख रहे हैं जो कि कंपाइलर्स के साथ काम करना है, जिसे आप निश्चित रूप से #prama once
का समर्थन करते हैं, तो #pragma once
का उपयोग करना पर्याप्त होना चाहिए। लेकिन ऐसा करने से आप अपने प्रोग्राम को संकलक सेट करने के लिए प्रतिबंधित करते हैं जो कार्यान्वयन परिभाषित सुविधा का समर्थन करते हैं।
यदि आपको पर सभी प्रोग्रामर पर काम करने के लिए अपने प्रोग्राम की आवश्यकता है तो आपको #pragma once
का उपयोग करना चाहिए और दोनों गार्ड शामिल करना चाहिए।
मामले में एक संकलक का समर्थन नहीं करता #pragma once
यह बस पर ध्यान नहीं देगा यह [रेफरी # 1], इस तरह के एक मामले में हैडर गार्ड आप उद्देश्य दोनों जब आप जानकारी नहीं है में काम करेगा, इसलिए उन्हें का उपयोग करने में कुछ भी गलत नहीं आपके लक्षित कंपाइलर्स द्वारा समर्थित सुविधाओं का।
तो यदि आप चाहते हैं कि आपका प्रोग्राम विभिन्न कंप्यूटर्स पर 100% पोर्टेबल हो, तो आदर्श तरीका अभी भी केवल गार्ड शामिल हैं। जैसा कि @ चार्ल्सबैली सही मायने में इंगित करता है क्योंकि #pragma once
के व्यवहार को परिभाषित किया गया है, अज्ञात कंपाइलर पर व्यवहार आपके प्रोग्राम पर हानिकारक प्रभाव डाल सकता है।
[रेफरी # 1]
स्टैंडर्ड सी ++ 03: 16.6 pragma directive
रूप
# pragma pp-tokensopt new-line
के एक पूर्व प्रसंस्करण के निर्देश का कारण बनता है कार्यान्वयन-परिभाषित तरीके से व्यवहार करने के लिए कार्यान्वयन। कार्यान्वयन द्वारा मान्यता प्राप्त कोई भी प्रगति अनदेखा नहीं की जाती है।
स्रोत
2012-11-12 07:04:23
याद रखें कि सूचीबद्ध कंपाइलर्स के पुराने संस्करण इसका समर्थन नहीं कर सकते हैं, इसलिए यदि आप ओपन-सोर्स प्रोग्राम बना रहे हैं जिसका स्रोत वितरित किया जाना है तो प्रगति काम नहीं कर सकती है। –
यह केवल कंपाइलर समर्थन के बारे में नहीं है, बल्कि यह भी निर्भर करता है कि पर्यावरण कितना जटिल है। क्या आप निश्चित रूप से * जानने के लिए कंपाइलर पर भरोसा करते हैं * यदि दो फाइलें समान हैं या नहीं, तो सभी netwowrk माउंट्स और प्रतीकात्मक लिंक सहित? –
सूचकांक और विश्लेषक जैसे सहायक उपकरण पर भी विचार करते हैं। कंपाइलर के लिए, जैसा कि उनके पीछे एक पूर्ण प्रीप्रोसेसर या पार्सर नहीं हो सकता है। – justin