我正在阅读一篇文章,其中 #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;
使其不输出任何东西(即代码不运行)