अगर मैं पढ़ रहा हूँ अपने प्रश्न का सही शीर्षक भ्रामक है, यह होना चाहिए
Is #if MACRO equivalent to #ifdef MACRO?
वे बराबर नहीं हैं, लेकिन वे कर सकते हैं (और अक्सर कर रहे हैं) दोनों द्विआधारी मोड हैं जो निर्दिष्ट करने के लिए प्रयोग किया जाता है या तो पर या बंद। पसंद मेरी राय में, व्यक्तिगत वरीयता का मामला है।
आप पहला विकल्प का उपयोग कर रहे हैं और या तो
#define verbose true
या
#define verbose false
और फिर राशि का उपयोग कर मोड जाँच या तो
#if verbose
या
#if !verbose
वास्तव में, मैं आप या तो TRUE या सच के बजाय 1 और या तो गलत या झूठी 0 के बजाय, क्योंकि सच और झूठे, उपयोग का सुझाव देंगे कर रहे हैं C/C++ मूल्यों और पूर्व प्रोसेसर नहीं है (या हो सकता है) सी/सी ++ मूल्यों तक पहुंच।
वैसे भी, अन्य आम तरीका द्विआधारी मोड निर्दिष्ट करने के लिए या तो झंडा परिभाषित या यह अपरिभाषित जिस स्थिति में आप या तो
#define verbose any thing (including nothing) goes here
है या #define बाहर छोड़ सकते हैं छोड़ने के लिए है।
और फिर आप, परीक्षण कर सकते हैं कि क्या झंडा परिभाषित किया गया है या तो
#ifdef verbose
या इसके समकक्ष
#if defined(verbose)
नोट के साथ: इस मामले में, आप ध्वज के मूल्य का परीक्षण नहीं कर रहे हैं आप केवल यह जांचने की आवश्यकता है कि यह परिभाषित किया गया है या नहीं।
आप भी परीक्षण कर सकते हैं, तो इसे और अधिक सुविधाजनक है झंडा या तो
#ifndef verbose
या इसके समकक्ष के साथ अपरिभाषित है या नहीं
#if !defined(verbose)
ऐसा लगता है कि 'if'f'' 'if' के साथ' #if परिभाषित 'के साथ नहीं, जैसा कि शीर्षक बताता है। –
दोनों के बीच का अंतर यह है कि '# ifdef' केवल एक शर्त, का उपयोग कर सकता है जबकि' #if परिभाषित (NAME) 'यौगिक सशर्त कर सकता है। – LPs
बीटीडब्लू, संपादित करने के बाद, आपका कोड अलग है: '# if' डीबग चेक करता है यदि' डीबग' सही है, जबकि 'ifdef' केवल तभी जांचता है जब 'डीबग' परिभाषित किया गया हो। – LPs