2010-04-19 58 views
9

是否有可能把宏放在C++中的宏?宏中的宏

喜欢的东西:

#define Something\ 
#ifdef SomethingElse\ //do stuff \ 
#endif\ 

我试着和它没有工作,所以我的猜测是,这是行不通的,除非有某种语法,可以解决这个问题?

回答

11

不,但您可以简单地通过将#ifdef作为顶层进行重构,并使用两个不同的#define Something ...版本对#ifdef的真假分支进行重构。

15

宏,是的。预处理器指令,这是你贴什么,没有

2

号我在c++ macros with memory?

如果你想检查或改变预处理环境回答了这个,换句话说定义预处理子程序而不是字符串替换宏,你需要使用头文件,虽然这样做的正当理由很少。

4

不能使用宏预处理指令,但如果我们想检查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