GCC 7.3 - 2.7. Wrapper Headers

2.7 आवरण हेडर




gcc

2.7 आवरण हेडर

कभी-कभी इसे सीधे संपादित किए बिना सिस्टम-प्रदान की गई हेडर फ़ाइल की सामग्री को समायोजित करना आवश्यक होता है। उदाहरण के लिए, जीसीसी के fixincludes ऑपरेशन ऐसा करता है। ऐसा करने का एक तरीका यह होगा कि एक ही नाम के साथ एक नई हेडर फ़ाइल बनाई जाए और मूल हेडर से पहले उसे खोज पथ में सम्मिलित किया जाए। जब तक आप पुराने हेडर को पूरी तरह से बदलने के इच्छुक हैं, तब तक यह ठीक है। लेकिन क्या होगा यदि आप नए से पुराने हेडर को संदर्भित करना चाहते हैं?

आप पुराने हेडर को ' #include ' के साथ शामिल नहीं कर सकते। वह शुरुआत से शुरू होगा, और अपने नए हेडर को फिर से खोजेगा। यदि आपका हेडर कई समावेशन से सुरक्षित नहीं है ( एक बार-केवल हेडर देखें ), तो यह असीम रूप से पुनरावृत्ति करेगा और एक घातक त्रुटि का कारण होगा।

आप एक पूर्ण पथनाम के साथ पुराने हेडर को शामिल कर सकते हैं:

#include "/usr/include/old-header.h"

यह काम करता है, लेकिन साफ ​​नहीं है; सिस्टम हेडर को कभी भी स्थानांतरित करना चाहिए, आपको मिलान करने के लिए नए हेडर को संपादित करना होगा।

सी मानक के भीतर इस समस्या को हल करने का कोई तरीका नहीं है, लेकिन आप GNU एक्सटेंशन ' #include_next ' का उपयोग कर सकते हैं। इसका मतलब है, "इस नाम के साथ अगली फ़ाइल शामिल करें"। यह निर्देश निर्दिष्ट फ़ाइल को खोजने के अलावा ' #include ' की तरह काम करता है: यह उस निर्देशिका के बाद हेडर फ़ाइल निर्देशिकाओं की सूची खोजना शुरू करता है जिसमें वर्तमान फ़ाइल मिली थी।

मान लें कि आप निर्दिष्ट करते हैं -I / usr / स्थानीय / शामिल हैं , और खोज करने के लिए निर्देशिकाओं की सूची में / usr / भी शामिल हैं ; और मान लीजिए कि दोनों निर्देशिकाओं में सिग्नल शामिल हैं। साधारण #include <signal.h> फ़ाइल को / usr / स्थानीय / शामिल करता है । यदि उस फ़ाइल में #include_next <signal.h> , तो यह उस डायरेक्टरी के बाद खोज शुरू करता है, और फ़ाइल को / usr / शामिल करता है

' #include_next ' < file > और " file " शामिल करने के बीच अंतर नहीं करता है, और न ही यह जाँचता है कि आपके द्वारा निर्दिष्ट फ़ाइल का वर्तमान फ़ाइल के समान नाम है। यह केवल नाम वाली फ़ाइल की तलाश करता है, खोज पथ में निर्देशिका के साथ शुरू होने के बाद जहां वर्तमान फ़ाइल मिली थी।

' #Include_next ' के उपयोग से बहुत भ्रम हो सकता है। हमारा सुझाव है कि इसका उपयोग तभी किया जाए जब कोई दूसरा विकल्प न हो। विशेष रूप से, इसका उपयोग किसी विशिष्ट कार्यक्रम से संबंधित हेडर में नहीं किया जाना चाहिए; इसका उपयोग केवल fixincludes की लाइनों के साथ वैश्विक सुधार करने के लिए किया जाना चाहिए।

अगला: सिस्टम हेडर , पिछला: कम्प्यूटेड शामिल , अप: हैडर फाइलें [ Contents ] [ Index ]