如果变量没有初始化,为什么C代码要花这么长时间编译和执行?

如果变量没有初始化,为什么C代码要花这么长时间编译和执行?,c,for-loop,variable-initialization,C,For Loop,Variable Initialization,下面的C代码需要很长时间来编译和执行 #include <stdio.h> int main() { int max; printf("Enter a value for max: "); scanf("%d", &max); for (int i=0; i<max; i++) { printf("%d\t", i); } retur

下面的C代码需要很长时间来编译和执行

#include <stdio.h>

int main()
{
    int max;
    printf("Enter a value for max: ");
    scanf("%d", &max);

    for (int i=0; i<max; i++)
    {
        printf("%d\t", i);
    }

    return 0;
}
编译和执行几乎是即时的。有人能解释一下原因吗

编辑:

当我在输入之前打印变量max的值时,它显示了2203648一些垃圾值。而不是int max=0,如果我赋值

int max = 2203648;
编译和执行需要同样长的时间。但是,如前所述,如果我指定max say

int max = 200;
编译和执行是即时的。它是否与预先分配的垃圾值有关

同样,这个问题只发生在windows计算机上,我用ubuntu测试过,编译和执行在两个版本的代码中都是即时的

在Windows 10中:

编译和执行,在屏幕上输入max:的值:

无变量初始化=约8秒

变量初始化=瞬时


编译器-gcc

我认为max=0的变量初始化并没有太大区别,但天知道为什么在ypur的情况下需要8秒。我认为您应该重新安装GCC编译器,再次正确设置路径变量,并在不同的IDE上尝试上述代码。

scanf失败。检查返回值

i、 e

max可能是某个较大的值,因此需要大量的时间

编辑


看到提示的延迟是printf在缓冲区中,在循环完成之前不会显示

,那么时间上有什么区别呢?@SuryaNarayanan:听起来很奇怪。你能可靠地重现这个问题吗?还是巧合?您是否有其他可能会导致您的计算机频繁减速的程序在运行?你能在多台计算机上重现这个问题吗?我猜你的项目文件夹中有一个预编译的二进制文件,用于一个版本或另一个版本。然后您的IDE注意到,与生成所述二进制文件的版本相比,一个版本不包含任何更改。您是否在使用IDE?如果是,是哪一个?您说编译和执行受到影响,但您只报告编译时间。执行也会受到影响吗?手动运行compile命令,记住在每次运行之间进行清理。我相信时间应该差不多是一样的。但是,当运行编译后的二进制文件时,防病毒会阻止其中一个exe文件,因此启动速度会慢得多。我自己也经历过,正如你所说,max被预先分配了一个非常大的垃圾值。这就是编译和执行可能花费这么长时间的原因吗?我猜很有可能。只需在循环之前将其打印出来,但不能打印或以其他方式读取未初始化的变量,因为这总是会生成UB,UB可以包括添加打印以使值看起来像零的简单操作。基本上,我们必须避免UB,而不是试图对其进行推理。@C中的代码d可以打印未初始化的变量。这不是印刷品。它的值是一些随机值。它仍然有一个值。有关该值的解释,请参见编辑
int max = 200;
   if (scanf("%d", &max) != 1) {
      fprintf(stderr, "Unable to read max");
      exit(1);
   }