यहां हम सी में हाइजेनिक मैक्रोज़ देखेंगे। हम सी में मैक्रोज़ के उपयोग को जानते हैं। लेकिन कभी-कभी, यह पहचानकर्ताओं के आकस्मिक कब्जा के कारण वांछित परिणाम नहीं देता है।
यदि हम निम्नलिखित कोड देखते हैं, तो हम देख सकते हैं कि यह ठीक से काम नहीं कर रहा है।
उदाहरण
#include<stdio.h> #define INCREMENT(i) do { int a = 0; ++i; } while(0) main(void) { int a = 10, b = 20; //Call the macros two times for a and b INCREMENT(a); INCREMENT(b); printf("a = %d, b = %d\n", a, b); }
प्रीप्रोसेसिंग के बाद कोड इस तरह होगा -
उदाहरण
#include<stdio.h> #define INCREMENT(i) do { int a = 0; ++i; } while(0) main(void) { int a = 10, b = 20; //Call the macros two times for a and b do { int a = 0; ++a; } while(0) ; do { int a = 0; ++b; } while(0) ; printf("a = %d, b = %d\n", a, b); }
आउटपुट
a = 10, b = 21
यहाँ हम देख सकते हैं कि मान a के लिए अद्यतन नहीं है। तो इस मामले में हम हाइजीनिक मैक्रोज़ का उपयोग करेंगे। ये हाइजेनिक मैक्रो मैक्रोज़ हैं जिनका विस्तार इस बात की गारंटी है कि यह पहचानकर्ताओं का आकस्मिक कब्जा नहीं बनाता है। यहां हम किसी भी वैरिएबल नाम का उपयोग नहीं करेंगे जो विस्तार के तहत कोड के साथ इंटरफेसिंग का जोखिम उठा सकता है। यहां मैक्रो के अंदर एक और वेरिएबल 't' का इस्तेमाल किया गया है। इसका उपयोग प्रोग्राम में ही नहीं किया जाता है।
उदाहरण
#include<stdio.h> #define INCREMENT(i) do { int t = 0; ++i; } while(0) main(void) { int a = 10, b = 20; //Call the macros two times for a and b INCREMENT(a); INCREMENT(b); printf("a = %d, b = %d\n", a, b); }
आउटपुट
a = 11, b = 21