无法理解以下C语言程序的输出

Mr.*_*aSh 0 c

我无法理解以下C程序的输出,有什么想法吗?

#include<stdio.h>

#include<conio.h>

void main()

{
  int a=5,b=6,c=11;

  clrscr();

  printf("%d %d %d");

  getch();
}
Run Code Online (Sandbox Code Playgroud)

该计划的输出是:

11 6 5

我不明白为什么上面的程序给我们printf中的反向变量值我从来没有声明哪个值必须打印...所以有任何理论,如果我们没有声明哪个变量必须打印然后我们得到变量的反向值我们上面在数据类型中声明了......

Bas*_*tch 13

这是未定义的行为,除非您关心特定于实现的详细信息,否则您不应期望特定输出(或其解释).

可能打印的是一些堆栈位置或寄存器中包含的(随机的,即"不可预测的")垃圾值,该值应该包含参数.

顺便说一下,一些编译器(即调用GCCgcc -Wall)会给你一些警告.尽量避免它们(通过更正源代码).

  • 我认为理解C的定义行为(和语义)比尝试枚举所有可能的未定义行为的情况更重要. (5认同)