嵌入在 #define 宏中的 if 语句

Embedded if statement in a #define macro

本文关键字:if 语句 #define      更新时间:2023-10-16

我正在阅读一篇文章 #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