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