我想将宏扩展的结果字符串化。
我尝试了以下方法:
#define QUOTE(str) #str
#define TEST thisisatest
#define TESTE QUOTE(TEST)
当我尝试获取“thisisatest”时,TESTE扩展为:“TEST”。我知道这是预处理器的正确行为,但是有人可以帮助我实现另一种方法吗?
Using TESTE #TEST is not valid
Using TESTE QUOTE(thisisatest) is not what I'm trying to do
最佳答案
像这样:
#include <stdio.h>
#define QUOTE(str) #str
#define EXPAND_AND_QUOTE(str) QUOTE(str)
#define TEST thisisatest
#define TESTE EXPAND_AND_QUOTE(TEST)
int main() {
printf(TESTE);
}
原因是当将宏参数替换为宏主体时,除非它们与该宏中的#或##预处理运算符一起出现,否则它们将被扩展。因此,
str
(代码中值为TEST
)不会在QUOTE
中扩展,但会在EXPAND_AND_QUOTE
中扩展。关于c-preprocessor - C预处理程序,将宏的结果字符串化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3419332/