आप मैक्रो में पूर्वप्रक्रमक निर्देशों उपयोग नहीं कर सकते, लेकिन हम अगर SomethingElse
परिभाषित किया गया है की जाँच करें और एक अलग मैक्रो कॉल करने के लिए चाहते हैं, तो आप इसे हासिल कर इस (एक c99 पूर्वप्रक्रमक और Boost.Preprocessor पुस्तकालय की आवश्यकता है) की तरह:
#define PP_CHECK_N(x, n, ...) n
#define PP_CHECK(...) PP_CHECK_N(__VA_ARGS__, 0,)
//If we define SomethingElse, it has to be define like this
#define SomethingElse ~, 1,
#define Something \
BOOST_PP_IF(PP_CHECK(SomethingElse), MACRO1, MACRO2)
SomethingElse
परिभाषित किया गया है यदि यह MACRO1
फोन करेगा, अन्यथा यह MACRO2
कॉल करेंगे। इस कार्य के लिए, SomethingElse
इस तरह परिभाषित किया जाना है: http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement
:
#define SomethingElse ~, 1,
वैसे, यह उनकी संकलक में एक बग की वजह से दृश्य स्टूडियो में काम नहीं करेगा,, यहाँ एक समाधान नहीं है
स्रोत
2012-01-16 05:42:35