C整蛊程序
C tricky program
我的老师给了我这个程序作为作业。我完成了作业,但无法理解为什么会出现此输出。你能解释一下这个编吗?或输出。
#include
#define scanf "%sABCDE"
int main(){
printf(scanf,scanf);
return 0;
}
输出-
-->./main
-->%sABCDEABCDE
#define
替换了 scanf
到 "ABCDE"
这个值。 #define 用于为特定变量定义值,例如
您可以将 pi 的值定义为 3.15
#define pi 3.14
现在在整个程序中,如果您使用 pi
变量,那么它将采用 3.14 值。所以根据你的程序,第一个 scanf
是一个字符串,在 printf 中,第一个参数是变量的类型,所以它是字符串类型,或者你可以说一个字符数组,因为 C 不支持字符串,所以它正在打印 %s
然后第二个参数是变量本身,它打印 scanf
.
的值
宏只是文本替换(挑剔者的信息:我知道令牌)。宏在编译之前被处理(因此称为预处理),
编译器正在编译替换所有宏后的代码:
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*)
我的老师给了我这个程序作为作业。我完成了作业,但无法理解为什么会出现此输出。你能解释一下这个编吗?或输出。
#include
int main(){
printf(scanf,scanf);
return 0;
}
输出-
-->./main
-->%sABCDEABCDE
#define
替换了 scanf
到 "ABCDE"
这个值。 #define 用于为特定变量定义值,例如
您可以将 pi 的值定义为 3.15
#define pi 3.14
现在在整个程序中,如果您使用 pi
变量,那么它将采用 3.14 值。所以根据你的程序,第一个 scanf
是一个字符串,在 printf 中,第一个参数是变量的类型,所以它是字符串类型,或者你可以说一个字符数组,因为 C 不支持字符串,所以它正在打印 %s
然后第二个参数是变量本身,它打印 scanf
.
宏只是文本替换(挑剔者的信息:我知道令牌)。宏在编译之前被处理(因此称为预处理),
编译器正在编译替换所有宏后的代码:
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*)