#define Printf()字符串中的预处理器替换

时间:2015-10-08 08:48:40

标签: c string macros printf c-preprocessor

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

printf("Print the number thirty: 30\n"); 

如果我做出以下定义

#define THIRTY 30

现在

printf("Print the number thirty: THIRTY"); 

C 预处理器是否会替换字符串中的THIRTY --> 30

或者我必须去:

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

3 个答案:

答案 0 :(得分:2)

C预处理器无法理解String内部的内容,因此不会操纵字符串。

以下声明将THIRTY替换为30

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

答案 1 :(得分:2)

PreProcessor可以做到,但你必须对你的定义进行字符串化。

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

查看THIS

答案 2 :(得分:1)

printf("Print the number thirty: THIRTY");   // it will consider is whole as a string 

这只会在输出中打印Print the number thirty: THIRTY

你的第二个陈述 -

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

将打印 - Print then number thirty:30作为输出。