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使用一些宏?
既然你可以写
#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到达该行时,预处理器已经被替换A为C。
所以简短的答案是,这是不可能的,因为预处理器会在文件编译之前替换A为。C