पृष्ठभूमि:.h फ़ाइलों को संशोधित किए बिना मैक्रो रेडिफ़िनेशन को संभालना ... सी/सी ++ भाषा
मान लें कि मेरे पास दो शीर्षलेख फ़ाइलें हैं a.h और b.h।
a.h शामिल हैं:
#define VAR 1
b.h शामिल हैं:
#define VAR 2
नोट: मैक्रो दोनों का नाम एक ही है। मान लें कि मेरे पास कुछ फ़ाइल myFile.c है जिसमें दोनों शीर्षलेख फ़ाइलें i.e. a.h और b.h शामिल हैं।
जब मैं VAR तक पहुंचने का प्रयास करता हूं, तो मुझे VAR की पुनर्वितरण त्रुटि मिलती है।
इस समस्या को हल करने के लिए, मैंने इस त्रुटि को रोकने के लिए a.h और b.h फ़ाइलों दोनों में #ifndef VAR कथन डाला। हेडर फाइल कई मैक्रो, न सिर्फ एक मैक्रो हो सकते हैं: a.h फ़ाइल
#ifndef VAR
#define VAR 1
#endif
b.h फ़ाइल हो जाता है
#ifndef VAR
#define VAR 2
#endif
नोट हो जाता है।
समस्या:
मान लेते हैं कि a.h और b.h फ़ाइलें तृतीय पक्ष पुस्तकालय से प्राप्त कर रहे हैं। इन फ़ाइलों में #ifndef VAR कथन शामिल नहीं है।
मुझे अपनी शीर्षलेख फ़ाइलों को बदलने की अनुमति नहीं है।
क्या मैं myFile.c या myFile.cpp फ़ाइल में मैक्रो 'VAR' redefinition त्रुटि को हल कर सकता हूं जो VAR मैक्रो का उपयोग करता है?
मुझे पता है कि मैं #undef VAR का उपयोग मैक्रो VAR को परिभाषित करने के लिए किया जा सकता है। मैं अपने प्रोग्राम में बाद में VAR को चुनिंदा कैसे कर सकता हूं? यानी myFile.c कोड की लाइन 10 पर, मैं अपने कोड के लाइन 15 पर, एएच फ़ाइल से VAR परिभाषा को संदर्भित करने में सक्षम होना चाहिए, मुझे बीएच फ़ाइल से VAR को संदर्भित करने में सक्षम होना चाहिए और लाइन 18 पर फिर से संदर्भित होना चाहिए आह फ़ाइल से VAR करने के लिए।
संक्षेप में, क्या मैं मैक्रो पॉलीमोर्फिज्म करने में सक्षम हूं? हेडर फ़ाइल का नाम दिया गया है, इसे उस फ़ाइल में मौजूद मैक्रो परिभाषा का संदर्भ लेना चाहिए।
मैंने किसी समस्या को हल करने के लिए नेमस्पेस चाल का उपयोग करने के बारे में सोचा था। नेमस्पेस में पहले हेडर फ़ाइल को पहले और दूसरी हेडर फ़ाइल को नेमस्पेस सेकेंड में परिभाषित करें।
मैं दो नामस्थान को परिभाषित करने की कोशिश की। पहले नेमस्पेस में # शामिल है एएच और दूसरा नेमस्पेस बीएच है। हालांकि, नामस्थान चाल मैक्रो के साथ काम नहीं करती है। जब मैंने फर्स्टन्स :: VAR तक पहुंचने का प्रयास किया, तो कंपाइलर एक त्रुटि संदेश रिपोर्ट करता है।
क्या आप कृपया कुछ सुझाव सुझा सकते हैं?
यह करता है ओपीएस जवाब नहीं है 'V'' की 'ए' या' बी 'की परिभाषा का एक-दूसरे से उपयोग करने के लिए ईमानदारी से उपयोग किया जाता है। – vladr