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*)