GCC 7.3 - 2.4. Once-Only Headers

2.4 एक बार-केवल हेडर




gcc

2.4 एक बार-केवल हेडर

यदि हेडर फ़ाइल दो बार शामिल होने के लिए होती है, तो कंपाइलर अपनी सामग्री को दो बार संसाधित करेगा। यह त्रुटि पैदा करने की बहुत संभावना है, उदाहरण के लिए जब कंपाइलर समान संरचना की परिभाषा को दो बार देखता है। यहां तक ​​कि अगर यह नहीं करता है, तो यह निश्चित रूप से समय बर्बाद करेगा।

इसे रोकने का मानक तरीका फ़ाइल की संपूर्ण वास्तविक सामग्री को सशर्त रूप से संलग्न करना है, जैसे:

/* File foo.  */
#ifndef FILE_FOO_SEEN
#define FILE_FOO_SEEN

the entire file

#endif /* !FILE_FOO_SEEN */

यह निर्माण आमतौर पर एक आवरण #ifndef के रूप में जाना जाता है। जब हेडर को फिर से शामिल किया जाता है, तो सशर्त गलत होगा, क्योंकि FILE_FOO_SEEN परिभाषित है। प्रीप्रोसेसर फ़ाइल की पूरी सामग्री को छोड़ देगा, और कंपाइलर इसे दो बार नहीं देखेगा।

CPP आगे भी अनुकूलन करता है। यह याद है जब एक हेडर फ़ाइल में एक आवरण ' #ifndef ' होता है। यदि बाद में ' #include ' उस शीर्षलेख को निर्दिष्ट करता है, और ' #ifndef ' में मैक्रो को अभी भी परिभाषित किया गया है, तो यह फ़ाइल को पुनः व्यवस्थित करने के लिए परेशान नहीं करता है।

आप टिप्पणी को आवरण के बाहर रख सकते हैं। वे इस अनुकूलन के साथ हस्तक्षेप नहीं करेंगे।

मैक्रो FILE_FOO_SEEN को कंट्रोलिंग मैक्रो या गार्ड मैक्रो कहा जाता है। उपयोगकर्ता हेडर फ़ाइल में, मैक्रो नाम ' _ ' से शुरू नहीं होना चाहिए। एक सिस्टम हेडर फ़ाइल में, उपयोगकर्ता कार्यक्रमों के साथ संघर्ष से बचने के लिए इसे ' __ ' से शुरू करना चाहिए। किसी भी प्रकार की हेडर फ़ाइल में, मैक्रो नाम में फ़ाइल का नाम और कुछ अतिरिक्त पाठ होना चाहिए, अन्य हेडर फ़ाइलों के साथ संघर्ष से बचने के लिए।

अगला: रैपर #ifndef के लिए विकल्प , पिछला: खोज पथ , ऊपर: हैडर फ़ाइलें [ Contents ] [ Index ]