2012-12-04 13 views
5

मैं कोड का एक टुकड़ा जो मैं शामिल करने के लिए करता है, तो दो मैक्रो की या तोमैक्रो

#ifdef MACRO1 || MACRO2 

void foo() 
{ 


} 

#endif 

मैं सी में यह पूरा करते कैसे परिभाषित कर रहे हैं चाहते हैं के साथ तार्किक ऑपरेटर का उपयोग करना?

उत्तर

10

#ifdef इसके अलावा, पूर्वप्रक्रमक अधिक सामान्य #if अनुदेश का समर्थन करता है; वास्तव में, #ifdef MACRO#if defined(MACRO) के लिए एक शॉर्टकट है, जहां defined एक "प्रीप्रोसेसर फ़ंक्शन" है जो मैक्रो परिभाषित होने पर 1 लौटाता है; हां, तो आप कर सकते हैं:

#if defined(MACRO1) || defined(MACRO2) 

void foo() 
{ 


} 

#endif 
+0

क्या है नीचे कोड में मुद्दा? इस तरह के उपयोग गलत होने पर वैकल्पिक विकल्प क्या है? # परिभाषित करें CUSTOM_METHOD 1 # परिभाषित करें ARDUINO_METHOD 2 # परिभाषित करें TIMER_DELAY_METHOD CUSTOM_METHOD #if परिभाषित (TIMER_DELAY_METHOD! = CUSTOM_METHOD) || परिभाषित (TIMER_DELAY_METHOD! = ARDUINO_METHOD) #Error "कोई टाइमर विधि परिभाषित किया गया है" #endif // परिभाषित – Rajesh

+0

मुझे लगता है कि मैं समझ गया और निम्नलिखित कोड काम करने #define CUSTOM_METHOD 1 #define ARDUINO_METHOD 2 #define कोई नहीं लगता है 3 # परिभाषित करें TIMER_DELAY_METHOD कोई नहीं #if (TIMER_DELAY_METHOD! = CUSTOM_METHOD) && (TIMER_DELAY_METHOD! = ARDUINO_METHOD) #error "कोई टाइमर विधि परिभाषित नहीं की गई है" #endif // परिभाषित – Rajesh

0
#if defined(Macro 1) + defined(Macro 2) == 1 
    <Code> 
    #endif 
2

यहाँ नहीं संस्करण अगर जरूरत: [! और एक मिनी डेमो]

#if !defined(MACRO1) && !defined(MACRO2) 
... 
#endif