C ++ में, क्या यह है:
#ifdef A && B
बराबर:
#if defined(A) && defined(B)
?
मैं सोच रहा था कि यह नहीं था, लेकिन मैं अपने संकलक (VS2005) के साथ अंतर नहीं पा सका हूं।
C ++ में, क्या यह है:
#ifdef A && B
बराबर:
#if defined(A) && defined(B)
?
मैं सोच रहा था कि यह नहीं था, लेकिन मैं अपने संकलक (VS2005) के साथ अंतर नहीं पा सका हूं।
जवाबों:
वे एक जैसे नहीं हैं। पहला काम नहीं करता है (मैंने 4.4.1 gcc में परीक्षण किया है)। त्रुटि संदेश था:
test.cc:1:15: चेतावनी: #ifdef निर्देश के अंत में अतिरिक्त टोकन
यदि आप जांचना चाहते हैं कि क्या कई चीजें परिभाषित हैं, तो दूसरे का उपयोग करें।
आप पूर्वप्रोसेसर लाइन के भीतर 0 या 1 का मूल्यांकन करने वाले अभिव्यक्तियों का उपयोग करने के लिए #if निर्देश में परिभाषित ऑपरेटर का उपयोग कर सकते हैं। यह आपको नेस्टेड प्रीप्रोसेसिंग निर्देशों का उपयोग करने से बचाता है। पहचानकर्ता के चारों ओर कोष्ठक वैकल्पिक हैं। उदाहरण के लिए:
#if defined (MAX) && ! defined (MIN)
परिभाषित ऑपरेटर का उपयोग किए बिना, आपको उपरोक्त उदाहरण देने के लिए निम्नलिखित दो निर्देशों को शामिल करना होगा:
#ifdef max #ifndef min
निम्नलिखित परिणाम समान हैं:
1।
#define A
#define B
#if(defined A && defined B)
printf("define test");
#endif
2।
#ifdef A
#ifdef B
printf("define test");
#endif
#endif
#else
, एक समस्या पैदा कर सकती हैं। केवल पहले विकल्प का वास्तव में मतलब वही है जो पूछने वाले ने पूछा था।
उन लोगों के लिए जो उदाहरण के लिए देख सकते हैं (UNIX / g ++) जो ओपी से थोड़ा अलग है, यह मदद कर सकता है:
`
#if(defined A && defined B && defined C)
const string foo = "xyz";
#else
#if(defined A && defined B)
const string foo = "xy";
#else
#if(defined A && defined C)
const string foo = "xz";
#else
#ifdef A
const string foo = "x";
#endif
#endif
#endif
#endif
VS2015 के रूप में उपरोक्त कार्यों में से कोई भी नहीं। सही निर्देश है:
#if (MAX && !MIN)
यहाँ और देखें