तो Foo
अपरिभाषित है, तो बाद के
#if 0 - 0 == 0
जो सच, झूठी नहीं है करने के लिए अनुवाद कर देगा। याद रखें कि #if
के तहत सभी अपरिभाषित पहचानकर्ताओं को शाब्दिक 0
के साथ प्रतिस्थापित किया गया है (एक बार सभी defined()
ऑपरेटर का मूल्यांकन किया जाता है)। यह भाषा कीवर्ड से मेल खाने वाले प्रीकोकैसिंग टोकन तक भी लागू होता है। सी भाषा में सभी कीवर्ड इस संदर्भ में 0
के साथ प्रतिस्थापित किए गए हैं। सी ++ कीवर्ड में true
और false
प्रतिस्थापन से मुक्त हैं, जबकि अन्य सभी कीवर्ड बदल दिए गए हैं।
(btw, कि इसका मतलब है कि सी में true
चुपचाप साथ 0
अगर <stdbool.h>
शामिल नहीं है प्रतिस्थापित किया जाएगा, और साथ 1
अगर <stdbool.h>
शामिल है।)
इस बीच
#if defined(Foo) && Foo == 0
गलत है जब Foo
अपरिभाषित है तो, आपका अंतर यहाँ है।
क्यूटी दस्तावेज वास्तव में यह सुझाव देता है कि पूर्व उत्तरार्द्ध जैसा ही है। मुझे नहीं पता कि वे ऐसा क्यों करते हैं, क्योंकि वे निश्चित रूप से समकक्ष नहीं हैं। यह क्यूटी दस्तावेज़ों में एक त्रुटि प्रतीत होता है।
#define Foo 0
और नहीं किया जा सकता:
#define Foo // Foo == 0 would give an error, cannot evaluate Foo
जबकि - फू == 0 और फू के बीच
तो क्यूटी दस्तावेज़ों में एक गलती है!'उनके स्पष्टीकरण से यह पता चला है कि उन दोनों के बराबर – Hate
+1 है, सभी अपरिभाषित पहचानकर्ताओं को शाब्दिक 0' – billz
@ बिल्ज़ और एंड्रीटी के साथ प्रतिस्थापित किया गया है, क्या आप सी ++ में मैक्रोज़ के बारे में कुछ लिंक या सलाह लेख साझा कर सकते हैं? क्योंकि उनके बारे में जो मैंने पाया है वह सिर्फ उनकी सूची और संक्षिप्त विवरण है, लेकिन मैंने निश्चित रूप से कहीं भी नहीं पढ़ा जैसे "सभी अपरिभाषित पहचानकर्ताओं को शाब्दिक 0 के साथ बदल दिया गया है"। – Hate