我的老师给了我这个程序作为作业。我做了我的作业,但不明白为什么这个输出。你能解释一下这个程序吗?或输出。# include
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*)
#define
将scanf
替换为"ABCDE"
。例如,当您想要定义特定变量的值时,可以使用#define可以将PI的值定义为3.15#define pi 3.14
现在在整个程序中,如果你使用pi
变量,那么它将取3.14的值。所以根据你的程序,首先scanf
是一个字符串,在printf中,第一个参数是变量的类型,所以它是字符串类型,或者你可以说一个字符数组,因为C语言不支持字符串,所以它打印%s
,然后第二个参数是变量本身,它打印scanf
的值。