是否有可能把宏放在C++中的宏?宏中的宏
喜欢的东西:
#define Something\
#ifdef SomethingElse\ //do stuff \
#endif\
我试着和它没有工作,所以我的猜测是,这是行不通的,除非有某种语法,可以解决这个问题?
是否有可能把宏放在C++中的宏?宏中的宏
喜欢的东西:
#define Something\
#ifdef SomethingElse\ //do stuff \
#endif\
我试着和它没有工作,所以我的猜测是,这是行不通的,除非有某种语法,可以解决这个问题?
不,但您可以简单地通过将#ifdef
作为顶层进行重构,并使用两个不同的#define Something ...
版本对#ifdef
的真假分支进行重构。
宏,是的。预处理器指令,这是你贴什么,没有
如果你想检查或改变预处理环境回答了这个,换句话说定义预处理子程序而不是字符串替换宏,你需要使用头文件,虽然这样做的正当理由很少。
不能使用宏预处理指令,但如果我们想检查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中工作,因为在他们的编译器错误的,这里有一个解决方法:http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement