परंपरागत रूप से, C ++ में कई हेडर इंक्लूज़न से बचने के लिए मानक और पोर्टेबल तरीका #ifndef - #define - #endif
प्री-कंपाइलर डायरेक्टिव स्कीम का उपयोग करना है जिसे मैक्रो-गार्ड स्कीम भी कहा जाता है (नीचे कोड स्निपेट देखें)।
#ifndef MY_HEADER_HPP
#define MY_HEADER_HPP
...
#endif
हालांकि अधिकांश कार्यान्वयन / संकलक (नीचे चित्र देखें) में, अधिक "सुरुचिपूर्ण" विकल्प है जो मैक्रो-गार्ड योजना के समान उद्देश्य को पूरा करता है #pragma once
। #pragma once
मैक्रो-गार्ड स्कीम की तुलना में कई फायदे हैं, जिनमें कम कोड, नाम की गड़बड़ी से बचना और कभी-कभी बेहतर संकलन गति शामिल है।
कुछ शोध करते हुए, मैंने महसूस किया कि यद्यपि #pragma once
निर्देश लगभग सभी ज्ञात संकलकों द्वारा समर्थित है, फिर भी इस बात पर अशांति है कि क्या #pragma once
निर्देश C ++ 11 मानक का हिस्सा है या नहीं।
प्रशन:
- क्या कोई स्पष्ट कर सकता है कि
#pragma once
निर्देश सी ++ 11 मानक का हिस्सा है या नहीं? - यदि यह C ++ 11 मानक का हिस्सा नहीं है, तो क्या बाद की रिलीज़ (जैसे, C ++ 14 या बाद के संस्करण) पर इसे शामिल करने की कोई योजना है?
- यह भी अच्छा होगा यदि कोई किसी एक तकनीक (यानी, मैक्रो-गार्ड एसे
#pragma once
) का उपयोग करके फायदे / नुकसान के बारे में विस्तार से बता सके ।
#pragma once
आमतौर पर ऐसा नहीं होता है।