如何将宏的定义作为字符串文字?

not*_*ser 11 c c++ c-preprocessor

在标题中说,我不想自己读,但我确实包括,我有

#define A B
#define B C
Run Code Online (Sandbox Code Playgroud)

现在

#define STR(name) # name
Run Code Online (Sandbox Code Playgroud)

定义一个宏,它给我任何宏的名称作为字符串,和

#define EXP_STR(name) STR(name)
Run Code Online (Sandbox Code Playgroud)

定义了一个宏,它可以将任何宏的完全扩展作为字符串.所以

cout << STR(A) << EXP_STR(A) << endl;
Run Code Online (Sandbox Code Playgroud)

将打印AC.

有没有办法"B"A使用一些宏?

Iha*_*imi 1

既然你可以写

#define B C
#define A B

#define STR(name) # name
#define EXP_STR(name) STR(name)
Run Code Online (Sandbox Code Playgroud)

cout << STR(A) << EXP_STR(A) << endl;
Run Code Online (Sandbox Code Playgroud)

会输出完全相同,这意味着这是不可能的。

当你这样做时

#define A B
Run Code Online (Sandbox Code Playgroud)

进而

#define B C
Run Code Online (Sandbox Code Playgroud)

现在这意味着A将被替换为C而不是B,所以将无法做到这一点,因为当cout到达该行时,预处理器已经被替换AC

所以简短的答案是,这是不可能的,因为预处理器会在文件编译之前替换A为。C