是否可以将宏放入c++中的宏中?
类似于:
#define Something\
#ifdef SomethingElse\ //do stuff \
#endif\我试过了,但它不起作用,所以我猜它不起作用,除非有某种语法可以修复它?
发布于 2010-04-19 09:15:55
不能,但您可以通过提取#ifdef作为顶层,并为#ifdef的true和false分支使用两个不同的#define Something ...版本来简单地重构它。
发布于 2010-04-19 09:16:14
宏,是的。预处理器指令,也就是您发布的指令,没有
发布于 2012-01-16 13:42:35
你不能在宏中使用预处理器指令,但如果我们想检查是否定义了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:
#define SomethingElse ~, 1,顺便说一句,这在Visual Studio中是行不通的,因为他们的编译器中有一个bug,这里有一个解决方法:http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement
https://stackoverflow.com/questions/2664703
复制相似问题