Jef*_*eff 3 c++ cout c-preprocessor
#define BLAH word
cout << BLAH;
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
'cout' 不是你做的事情。它是一个全局变量,是std::ostream类型的一个实例。你可以说例如“输出到cout”。
#define进行文本替换。这与您在文本编辑器中使用搜索和替换来替换BLAH为word. 因此,该行cout << BLAH;变为cout << word;。如果它不起作用,那是因为cout << word;在该范围内不是有效的语句。预处理器不关心任何周围的文本。它对代码的理解基本上为零(它知道如何标记代码,即,如果您不放入任何空格,则拆分运算符和其他标点符号,但仅此而已。)
尝试
#define STRINGIFY(x) #x
#define STRINGIFYMACRO(y) STRINGIFY(y)
#define BLAH word
cout << STRINGIFYMACRO(BLAH);
Run Code Online (Sandbox Code Playgroud)
额外的间接级别导致宏的值被字符串化而不是宏的名称.