C #在Printf()字符串中定义前置处理器替换

C #在Printf()字符串中定义前置处理器替换,c,string,macros,printf,c-preprocessor,C,String,Macros,Printf,C Preprocessor,我正在打印一个字符串,例如: printf("Print the number thirty: 30\n"); 如果我做出以下定义 #define THIRTY 30 现在呢 printf("Print the number thirty: THIRTY"); C预处理器是否替换字符串中的三十-->30 还是我必须去: printf("Print then number thirty: %d", THIRTY); 这将只打印输出中的数字三十:三十 你的第二句话- printf("P

我正在打印一个字符串,例如:

printf("Print the number thirty: 30\n"); 
如果我做出以下定义

#define THIRTY 30
现在呢

printf("Print the number thirty: THIRTY"); 
C预处理器是否替换字符串中的
三十-->30

还是我必须去:

printf("Print then number thirty: %d", THIRTY); 
这将只打印输出中的数字三十:三十

你的第二句话-

printf("Print then number thirty: %d", THIRTY);  //you probably need this

将打印-
然后将数字30:30打印为输出。

C预处理器无法理解字符串中的内容,因此无法操作字符串

下面的语句将
30
替换为
30

printf("Print then number thirty: %d", THIRTY);  

预处理器可以这样做,但您必须严格定义

#define xstr(s) str(s)
#define str(s) #s
#define THIRTY 30
#define TEST "Print the number thirty: " xstr(THIRTY) "\n"

int main()
{
    printf(TEST);
    return 0;
}

看一看

也许,快一点试试怎么样?@LPs这不是重点。OP想知道哪一个会像他预期的那样工作。因此,答案是。问题是C预处理器是否替换字符串中的三十-->30?预处理器可以做到这一点…预处理器会用宏定义做到这一点吗?然后需要更改宏定义。问题在于宏观定义。因此,没有这个定义,预处理器就不会这样做。@LPs在代码中有一些额外的东西,因此它可以工作。但是只有
#定义三十个
就不行了。我想这个问题可以解决这个问题。我猜,可能我错了,OP是在寻求一种方法来加速printf,使用一种预处理器的方法来提供一个预格式化的字符串。这是为了避免printf评估
%d
格式。
#define xstr(s) str(s)
#define str(s) #s
#define THIRTY 30
#define TEST "Print the number thirty: " xstr(THIRTY) "\n"

int main()
{
    printf(TEST);
    return 0;
}