2010-09-27 11 views
51

निम्नलिखित दो प्रीप्रोसेसर नियंत्रण विवरणों के बीच अंतर (यदि कोई है) क्या है।प्रीप्रोसेसर निर्देशों के बीच अंतर #if और #ifdef

#if defined(FOO) 

#if भी अन्य परीक्षण के लिए या अधिक जटिल पूर्वप्रक्रमक स्थितियों के लिए इस्तेमाल किया जा सकता:

#if 

और

#ifdef 
+0

वे मैक्रोज़ और न ही नियंत्रण कथन हैं। उनका नाम "प्रीप्रोसेसर निर्देश" है। – ybungalobill

+1

संपादित शीर्षक। "अस्पष्ट" खोजों के लिए टेक्स्ट बॉडी में "नियंत्रण कथन" को छोड़ दिया। एकाधिक लाइनों पर टिप्पणी करने के बजाय – DevSolar

उत्तर

112

आप ऐसा करके अंतर प्रदर्शित कर सकते हैं।

+8

+1 स्पष्ट रूप से इंगित करने के लिए कि शून्य पर कुछ परिभाषित करने से #if अक्षम हो जाएगा, लेकिन #ifdef नहीं होगा। – DevSolar

+0

यदि खाद्य संकलक संकलन से गैर-शून्य परिभाषित करता है। क्यों? –

+1

@fahad: '# if' प्रतीक के * मूल्य * को यह देखने के लिए जांचता है कि यह शून्य-शून्य (सत्य) या शून्य (झूठा) है या नहीं। फिर परिणाम सही होने पर ब्लॉक संकलित किया जाता है। –

37
#ifdef FOO 

के लिए एक शॉर्टकट है। , मूल्य प्रतीक के के लिए

#define FOO 0 
#if FOO 
    // won't compile this 
#endif 
#ifdef FOO 
    // will compile this 
#endif 

#if चेकों थोड़ी देर #ifdef चेकों प्रतीक के अस्तित्व (चाहे इसके मूल्य का):

#if defined(FOO) || defined(BAR) 
+12

या मेरे पसंदीदा #if 0। –

+0

'अगर (0)' डीबग मोड में लाइनों को संकलित करने की अनुमति देता है, ताकि आप डिबगिंग करते समय ब्लॉक में कूद सकें ... – pascal

+1

@pascal: यह अत्यधिक संकलक/env विशिष्ट लगता है। सी ++ एक डीबग मोड को भी परिभाषित नहीं करता है (हालांकि एनडीईबीयूजी का अर्थ है जोर के संदर्भ में)। ;- पी –

संबंधित मुद्दे