如何在C++中定义扩展到条件语句的宏?
How to define a macro that expands to a conditional statement in C++?
我想创建一些上下文相关的宏。宏
#define LOG_WARNING(x) qWarning()().noquote().nospace() << x
工作正常,它位于文件Macros.h
中。我想定义一个宏,当从单元测试例程调用时,它不会打印日志消息。所以,我修改了像
#define LOG_INFO(x) if(!UNIT_TESTING) qInfo().noquote().nospace() << x
由于以这种方式宏将取决于UNIT_TESTING
,我在同一Macros.h
中提供
extern bool UNIT_TESTING; // Whether in course of unit testing
但是,编译器告诉
declaration does not declare anything [-fpermissive]
extern bool UNIT_TESTING; // Whether in course of unit testing
^
同时,如果在包含Macros.h
的文件中声明了外部,则它可以正常工作。我错了什么吗?
下面介绍如何在源文件之间共享变量。尽管如此,我强烈建议不要这样做,而是实现一个函数(bool IS_UNIT_TESTING(( (或处理这个问题的类。 通过这种方式,您可以在不更改接口的情况下更改实现。
此外,宏是邪恶的。它们容易出错,无法轻松调试。改用内联函数或 constexp。编译器会将其优化为几乎相同的代码。
相关文章:
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 在 if 语句中使用 GetKeyState 时,它会跳过条件
- C++ 中的"if"语句不会从左到右计算条件
- 优化/减少 if 语句中的条件表达式
- CPP 带有条件语句的内在事物
- 有没有办法在循环中的条件至少满足一次时运行语句?
- 如果验证容器的大小并在同一条件语句下访问元素,这是很好的做法吗?
- 如果语句错误地读取字符串,则始终在第一个条件返回
- 条件不变的 if 语句会减慢我的C++代码吗?
- C++ - 这个条件语句写得正确吗?还是有更有效的写法?
- C++17 if 语句,带有初始值设定项但没有条件
- if语句中满足的条件的索引
- C++:如何在 if 语句条件中使用指针
- 在 CPP 中将函数调用定时为 if 语句条件
- c++ 读取左 IF 语句条件和右语句条件
- C++忽略if语句条件
- 考虑到模板参数,正在更改if语句条件
- IF语句条件内的循环