我想将宏扩展的结果字符串化。

我尝试了以下方法:

#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/

10-13 08:19