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;
}