#Ifdef और #ifndef की भूमिका


99
#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");

इस में क्या की भूमिका है #ifdefऔर #ifndef, और उत्पादन क्या है?

जवाबों:


131

शर्त के आधार पर प्री-प्रोसेसर द्वारा एक जोड़ीifdef/endif या ifndef/endif जोड़ी के अंदर पाठ को छोड़ दिया जाएगा या हटा दिया जाएगा। ifdefका अर्थ है "यदि निम्नलिखित को परिभाषित किया गया है" जबकि ifndefइसका अर्थ है "यदि निम्न परिभाषित नहीं है"।

इसलिए:

#define one 0
#ifdef one
    printf("one is defined ");
#endif
#ifndef one
    printf("one is not defined ");
#endif

के बराबर है:

printf("one is defined ");

चूंकि oneपरिभाषित किया गया है इसलिए ifdefयह सच है और ifndefगलत है। इससे कोई फर्क नहीं पड़ता कि इसे किस रूप में परिभाषित किया गया है । एक समान (मेरी राय में बेहतर) कोड का टुकड़ा यह होगा:

#define one 0
#ifdef one
    printf("one is defined ");
#else
    printf("one is not defined ");
#endif

चूँकि वह इस विशेष स्थिति में इरादे को और स्पष्ट रूप से निर्दिष्ट करता है।

आपके विशेष मामले में, परिभाषित ifdefनहीं होने के बाद पाठ हटा दिया गया oneहै। के बाद का पाठ उसी कारण ifndef से हटा दिया जाता है। endifकुछ बिंदुओं पर दो क्लोजिंग लाइनें होनी चाहिए और पहले के कारण लाइनें फिर से शामिल होने लगेंगी:

     #define one 0
+--- #ifdef one
|    printf("one is defined ");     // Everything in here is included.
| +- #ifndef one
| |  printf("one is not defined "); // Everything in here is excluded.
| |  :
| +- #endif
|    :                              // Everything in here is included again.
+--- #endif

68

किसी को यह उल्लेख करना चाहिए कि प्रश्न में थोड़ा जाल है। #ifdefकेवल तभी जांच करेगा कि निम्नलिखित प्रतीक को #defineकमांड लाइन के माध्यम से या परिभाषित किया गया है , लेकिन इसका मूल्य (वास्तव में इसका प्रतिस्थापन) अप्रासंगिक है। आप भी लिख सकते हैं

#define one

precompilers स्वीकार करते हैं कि। लेकिन अगर आप इसका उपयोग करते हैं तो #ifयह दूसरी बात है।

#define one 0
#if one
    printf("one evaluates to a truth ");
#endif
#if !one
    printf("one does not evaluate to truth ");
#endif

दे देंगे one does not evaluate to truth। कीवर्ड definedवांछित व्यवहार प्राप्त करने की अनुमति देता है।

#if defined(one) 

इसलिए इसके बराबर है #ifdef

#ifनिर्माण का लाभ कोड पथों के बेहतर संचालन की अनुमति देना है, पुराने #ifdef/ #ifndefजोड़े के साथ ऐसा कुछ करने की कोशिश करना ।

#if defined(ORA_PROC) || defined(__GNUC) && __GNUC_VERSION > 300

0

"# आइफ़ वन" का अर्थ है कि अगर "# एफ़ वन" को "# एफ़ वन" लिखा गया है तो अन्यथा "# एफ़ंड वन" निष्पादित किया जाता है।

यह सिर्फ C प्री-प्रोसीजर (CPP) का निर्देश है, यदि C, लैंग्वेज में ब्रांच स्टेटमेंट्स हैं।

यानी अगर {# डेफिन वन} तो प्रिंटफ ("एक सच का मूल्यांकन"); अन्य प्रिंटफ ("एक परिभाषित नहीं है"); इसलिए यदि कोई एक बयान नहीं था, तो बयान की दूसरी शाखा को निष्पादित किया जाएगा।


4
मुझे यकीन नहीं है कि यह क्या जोड़ता है कि अन्य उत्तर पहले से ही कवर नहीं करते हैं, और आपका उदाहरण सी या सी ++ नहीं है।
13

-2

कोड अजीब लग रहा है क्योंकि प्रिंटफ़ किसी भी फ़ंक्शन ब्लॉक में नहीं हैं।


1
पूरा ब्लॉक एक फंक्शन के अंदर हो सकता है। और stackoverflow में आपका स्वागत है। कृपया stackoverflow.com/help/how-to-answer पढ़ें ।
राजशेखर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.