क्या C ++ में #if पूर्व-प्रोसेसर निर्देशों को नेस्टेड किया जा सकता है?


84

मेरे पास c ++ में प्री-प्रोसेसर निर्देशों के बारे में एक प्रश्न है:

उदाहरण के लिए:

#ifndef QUESTION

//some code here

#ifndef QUESTION

//some code here

#endif

#endif

क्या हम इसे इस तरह से उपयोग कर सकते हैं और क्या C ++ कंपाइलर सही तरीके से ifndefऔर endifउससे मेल खा सकता है?


1
आप सशर्त घोंसला बना सकते हैं, और आप एक मैक्रो को दूसरे से कॉल कर सकते हैं लेकिन आप सीधे मैक्रोज़ को घोंसला नहीं दे सकते हैं, जैसे #define AAA #define XXX- यह सही ढंग से काम नहीं करेगा।
एसएफ।

2
चूँकि एक C प्रश्न को केवल इस एक के डुप्लिकेट के रूप में बंद किया गया था, मैं बताता हूँ कि C और C ++ प्रीप्रोसेसर के लिए नियम समान हैं, कम से कम जहाँ तक यह प्रश्न है।
कीथ थॉम्पसन

जवाबों:


112

हाँ हम कर सकते हैं। #endifपिछले करने के लिए बयान मैचों #if #ifdefया #ifndefआदि जिसके लिए वहाँ कोई संगत नहीं किया गया है #endif

जैसे

#if  ----------|
#if  -----|    |
#endif ---|    |
#endif --------|

हमारे यहाँ दो #endif हैं, इसलिए पहला #endif दूसरा #ifndef मैच करेगा?

यह पिछले एक से मेल नहीं खाएगा; इसका मतलब है कि हम उन्हें घोंसला नहीं बना सकते
फ्रेड फू

49

हां, आप घोंसला #if/ #endifब्लॉक कर सकते हैं । कुछ सी कोडिंग शैली आपको लिखने के लिए कहेंगी

#ifdef CONDITION1
# ifdef CONDITION2
# endif
#endif

घोंसले के शिकार के स्तर को सूचित करने के लिए रिक्त स्थान का उपयोग करना।


5
नेस्टिंग बिट के लिए +1, यह कभी-कभी स्पष्टता के साथ बहुत मदद करता है।
एंड्रे कारन

आप अंतरिक्ष क्यों डालेंगे? सिर्फ क्यों नहीं#ifdef
जेहाद

3
मुझे यह भी पता नहीं था कि बीच #और पूर्वप्रक्रमक निर्देशों की अनुमति थी। उस टिप के लिए बड़ा धन्यवाद!
एलेक्सा

0

जब तक आप #undef QUESTION नहीं करेंगे, आपके कोड में #ifndef QUESTION सेक्शन छूट जाएगा।

सौभाग्य!


क्षमा करें, कोड नमूना गलत है! मुझे लगा कि यह
bert-jan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.