嵌入在 #define 宏中的 if 语句
Embedded if statement in a #define macro
我正在阅读一篇文章 #define 其中宏是这样制作的:
#define TEST(level) if (level > 2) ; else std::cout
然后可以在代码中使用,如下所示:
Test(1) << 3;
Test(3) << 4;
我的印象是,如果你写
TEST(1)
它将替换为:
std::cout
和
TEST(3)
将替换为空字符串(在代码文件中)。但是,如果它以这种方式工作,那么它应该抛出一个错误,因为
<< 3;
无效。
这个宏实际上是如何工作的?以及预处理器是如何变化的。
TEST(3) << 3;
这样它就不会输出任何内容(即代码不会运行)
我相信你弄错了:
对于TEST(3) << 3
,替换的形式是:
if (3 > 2) ; else std::cout << 3
它仍然是一个有效的表达式
它正在用TEST(x)
替换;
if (x > 2)
// do nothing
else
std::cout << x
预处理器替换所有文本,这意味着您可以获得整个if-else。
这也可以写成
#define TEST(x) if (!x > 2) std::cout
相关文章:
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- c++:定义if语句中的模板
- C++嵌套的 If 语句中,它无法按预期工作
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 需要有关此 if 语句的帮助
- 转换器练习:跳过 if 语句和 if 语句
- 避免在 C++ 中的 if 语句中递增
- 如果仍然不满足要求,如何使 if 语句重复?
- do while 循环中的 if 语句以 yes 或 no 结尾
- 为什么在此C++代码中触发此 if 语句?
- 如何基于平台在制作文件中制作if语句?
- 在 if 语句中使用 GetKeyState 时,它会跳过条件
- C++ If 语句,从其他语句重复