Kar*_*tel 6

  1. 'cout' 不是你做的事情。它是一个全局变量,是std::ostream类型的一个实例。你可以说例如“输出到cout”。

  2. #define进行文本替换。这与您在文本编辑器中使用搜索和替换来替换BLAHword. 因此,该行cout << BLAH;变为cout << word;。如果它不起作用,那是因为cout << word;在该范围内不是有效的语句。预处理器不关心任何周围的文本。它对代码的理解基本上为零(它知道如何标记代码,即,如果您不放入任何空格,则拆分运算符和其他标点符号,但仅此而已。)


Ben*_*igt 5

尝试

#define STRINGIFY(x) #x
#define STRINGIFYMACRO(y) STRINGIFY(y)

#define BLAH word
cout << STRINGIFYMACRO(BLAH);
Run Code Online (Sandbox Code Playgroud)

额外的间接级别导致宏的值被字符串化而不是宏的名称.

在ideone上测试.