#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
इस में क्या की भूमिका है #ifdefऔर #ifndef, और उत्पादन क्या है?
#define one 0
#ifdef one
printf("one is defined ");
#ifndef one
printf("one is not defined ");
इस में क्या की भूमिका है #ifdefऔर #ifndef, और उत्पादन क्या है?
जवाबों:
शर्त के आधार पर प्री-प्रोसेसर द्वारा एक जोड़ी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
किसी को यह उल्लेख करना चाहिए कि प्रश्न में थोड़ा जाल है। #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
"# आइफ़ वन" का अर्थ है कि अगर "# एफ़ वन" को "# एफ़ वन" लिखा गया है तो अन्यथा "# एफ़ंड वन" निष्पादित किया जाता है।
यह सिर्फ C प्री-प्रोसीजर (CPP) का निर्देश है, यदि C, लैंग्वेज में ब्रांच स्टेटमेंट्स हैं।
यानी अगर {# डेफिन वन} तो प्रिंटफ ("एक सच का मूल्यांकन"); अन्य प्रिंटफ ("एक परिभाषित नहीं है"); इसलिए यदि कोई एक बयान नहीं था, तो बयान की दूसरी शाखा को निष्पादित किया जाएगा।
कोड अजीब लग रहा है क्योंकि प्रिंटफ़ किसी भी फ़ंक्शन ब्लॉक में नहीं हैं।