Mik*_*ike 0 c++ c-preprocessor
我正在阅读一篇文章,其中#define宏是这样制作的:
#define TEST(level) if (level > 2) ; else std::cout
Run Code Online (Sandbox Code Playgroud)
然后可以在代码中使用,如下所示:
Test(1) << 3;
Test(3) << 4;
Run Code Online (Sandbox Code Playgroud)
我的印象是,如果你写的
TEST(1)
Run Code Online (Sandbox Code Playgroud)
它将取代它:
std::cout
Run Code Online (Sandbox Code Playgroud)
和
TEST(3)
Run Code Online (Sandbox Code Playgroud)
将被替换为空字符串(在代码文件中).但是,如果它以这种方式工作,那么它应该抛出一个错误,因为
<< 3;
Run Code Online (Sandbox Code Playgroud)
是无效的.
这个宏实际上如何工作?以及预处理器如何变化
TEST(3) << 3;
Run Code Online (Sandbox Code Playgroud)
所以它不输出任何东西(也就是代码不运行)
我相信你弄错了:
因为TEST(3) << 3,被替换的形式是:
if (3 > 2) ; else std::cout << 3
Run Code Online (Sandbox Code Playgroud)
它仍然是一个有效的表达