首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宏中的宏

宏中的宏
EN

Stack Overflow用户
提问于 2010-04-19 09:12:52
回答 4查看 22K关注 0票数 15

是否可以将宏放入c++中的宏中?

类似于:

代码语言:javascript
复制
#define Something\
#ifdef SomethingElse\ //do stuff \
#endif\

我试过了,但它不起作用,所以我猜它不起作用,除非有某种语法可以修复它?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-19 09:15:55

不能,但您可以通过提取#ifdef作为顶层,并为#ifdef的true和false分支使用两个不同的#define Something ...版本来简单地重构它。

票数 12
EN

Stack Overflow用户

发布于 2010-04-19 09:16:14

宏,是的。预处理器指令,也就是您发布的指令,没有

票数 20
EN

Stack Overflow用户

发布于 2012-01-16 13:42:35

你不能在宏中使用预处理器指令,但如果我们想检查是否定义了SomethingElse并调用不同的宏,你可以这样完成(需要一个c99预处理器和Boost.Preprocessor库):

代码语言:javascript
复制
#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

代码语言:javascript
复制
#define SomethingElse ~, 1,

顺便说一句,这在Visual Studio中是行不通的,因为他们的编译器中有一个bug,这里有一个解决方法:http://connect.microsoft.com/VisualStudio/feedback/details/380090/variadic-macro-replacement

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2664703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档