GCC 7.3 - 3.8. Undefining and Redefining Macros

3.8 अंडरफाइनिंग और रिफ़ाइनिंग मैक्रोज़




gcc

3.8 अंडरफाइनिंग और रिफ़ाइनिंग मैक्रोज़

यदि कोई मैक्रो उपयोगी होना बंद कर देता है, तो यह ' #undef ' निर्देश के साथ अपरिभाषित हो सकता है। ' #undef ' एकल तर्क लेता है, मैक्रो का नाम अपरिभाषित करता है। आप नंगे मैक्रो नाम का उपयोग करते हैं, भले ही मैक्रो फ़ंक्शन की तरह हो। मैक्रो नाम के बाद लाइन पर कुछ भी दिखाई देने पर यह एक त्रुटि है। यदि नाम स्थूल न हो तो ' # धन ' का कोई प्रभाव नहीं पड़ता।

#define FOO 4
x = FOO;        → x = 4;
#undef FOO
x = FOO;        → x = FOO;

एक बार जब कोई मैक्रो अपरिभाषित हो जाता है, तो उस पहचानकर्ता को बाद में ' #define ' के निर्देश द्वारा मैक्रो के रूप में पुनः परिभाषित किया जा सकता है। नई परिभाषा में पुरानी परिभाषा से कोई समानता नहीं है।

हालांकि, अगर एक पहचानकर्ता जो वर्तमान में एक मैक्रो है, उसे फिर से परिभाषित किया जाता है, तो नई परिभाषा को प्रभावी रूप से पुराने के समान होना चाहिए। दो मैक्रो परिभाषाएँ प्रभावी रूप से समान हैं यदि:

  • दोनों एक ही प्रकार के मैक्रो (ऑब्जेक्ट- या फ़ंक्शन-जैसे) हैं।
  • प्रतिस्थापन सूची के सभी टोकन समान हैं।
  • यदि कोई पैरामीटर हैं, तो वे समान हैं।
  • दोनों में एक ही स्थान पर व्हॉट्सएप दिखाई देता है। हालांकि यह व्हाट्सएप की बिल्कुल समान मात्रा की जरूरत नहीं है। याद रखें कि टिप्पणियां व्हॉट्सएप के रूप में गिनी जाती हैं।

ये परिभाषाएँ प्रभावी रूप से समान हैं:

#define FOUR (2 + 2)
#define FOUR         (2    +    2)
#define FOUR (2 /* two */ + 2)

लेकिन ये नहीं हैं:

#define FOUR (2 + 2)
#define FOUR ( 2+2 )
#define FOUR (2 * 2)
#define FOUR(score,and,seven,years,ago) (2 + 2)

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

अगला: मैक्रो तर्क के भीतर निर्देश , पिछला: पूर्वनिर्धारित मैक्रोज़ , ऊपर: Macros [ Contents ] [ Index ]