如果变量没有初始化,为什么C代码要花这么长时间编译和执行?
下面的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
#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);
}