我想知道是否有办法合并#define和#ifndef宏..
这意味着我想在#define宏中使用#ifndef宏。
由于它很难解释,这是我想要做的一个例子:
#define RUN_IF_DEBUG \
#ifndef DEBUG_MODE \
; // do nothing \
#else \
cout << "Run!" << endl; \
#endif
int main() {
RUN_IF_DEBUG
}
所以我希望 RUN_IF_DEBUG 宏只在定义 DEBUG_MODE 的情况下运行...
有办法做到这一点吗?
答案 0 :(得分:5)
通常以相反的方式完成:
#ifndef DEBUG_MODE
# define RUN_IF_DEBUG ;
#else
# define RUN_IF_DEBUG cout << "Run!" << endl;
#endif
答案 1 :(得分:2)
简单地做
#ifndef DEBUG_MODE
#define RUN_IF_DEBUG ; // do nothing
#else
#define RUN_IF_DEBUG cout << "Run!" << endl;
#endif
您不能将其他预处理程序语句放在宏的主体中。
来自c++ standards definitions 草案部分
16个预处理指令
...
控制线:
...
# define
标识符替换列表换行符# define
标识符 lparen identifier-listopt)replacement-list new-line
# define
标识符 lparen ...)replacement-list new-line
# define
标识符 lparen identifier-list,...)replacement-list new-line
这些是#define
语句的允许语法变体。
`
答案 2 :(得分:0)
问题是宏中的行继续。他们所做的是将所有内容放在一行上,因此扩展的宏看起来像
int main() {
#ifndef DEBUG_MODE ; #else cout ...; #endif
}
这对预处理器或编译器不起作用。
相反,你应该切换嵌套,首先使用#ifndef
,然后使用#define
内层的宏。