C棘手的程序



我的老师给了我这个程序作为作业。我做了我的作业,但不明白为什么这个输出。你能解释一下这个程序吗?或输出。# include#define scanf "%sABCDE">

int main(){
printf(scanf,scanf);
return 0;
}

输出——

-->./main
-->%sABCDEABCDE

宏只是文本替换(吹毛求疵者的信息:我知道token)。宏在编译前处理(因此称为预处理),

编译器正在编译所有宏替换后的代码:

int main(){
printf("%sABCDE","%sABCDE");
return 0;
}

我想现在一切都清楚了。

#include<stdio.h>
#define macro "%sABCDE"
int main(){
printf(macro,macro);
return 0;
}

#include<stdio.h>
int main(){
printf("%sABCDE","%sABCDE");
return 0;
}

printf的第一个参数是格式字符串,而第二个参数是另一个字符串(const char*)

#definescanf替换为"ABCDE"。例如,当您想要定义特定变量的值时,可以使用#define可以将PI的值定义为3.15#define pi 3.14现在在整个程序中,如果你使用pi变量,那么它将取3.14的值。所以根据你的程序,首先scanf是一个字符串,在printf中,第一个参数是变量的类型,所以它是字符串类型,或者你可以说一个字符数组,因为C语言不支持字符串,所以它打印%s,然后第二个参数是变量本身,它打印scanf的值。

最新更新