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

苏里亚纳拉亚南

下面的 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 变量,例如

int max = 0;

编译和执行几乎是瞬时的。有人可以解释为什么吗?

编辑:

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

int max = 2203648;

编译和执行需要同样长的时间。但是,如前所述,如果我分配 max 说

int max = 200;

编译和执行是即时的。它与预先分配的垃圾值有什么关系吗?

另外这个问题只出现在windows电脑上,我用ubuntu测试过,两个版本的代码编译执行都是瞬间的。

在 Windows 10 中:

编译和执行,从“为最大值输入一个值:”出现在屏幕上:

没有变量初始化 = 大约 8 秒

带变量初始化 = 瞬时

编译器-gcc

埃德·希尔

scanf失败。检查返回值。

IE

   if (scanf("%d", &max) != 1) {
      fprintf(stderr, "Unable to read max");
      exit(1);
   }

max 可能是一些大的价值因此大量的时间

编辑

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么C ++编译需要这么长时间?

为什么在C和C ++之间初始化全局变量有这种区别?

C ++类实例未初始化但没有编译错误,为什么

为什么零初始化不是c ++中未初始化变量的默认值?有编译器选项可以强制执行吗?

为什么这个 C 结构体初始化代码会产生总线错误?

为什么有必要在 C 中对变量执行任何赋值之前对其进行初始化?

如果C ++中的数组要求的大小是一个常量表达式,为什么我可以使用仅带有const的变量来对其进行初始化?

为什么C和C ++编译器将显式初始化和默认初始化的全局变量放在不同的段中?

为什么const变量不需要在C中初始化?

为什么 matplotlib 需要这么长时间来绘制?

为什么我的变量没有在此代码中初始化?

为什么我的代码块实例变量没有初始化并打印出“ NSGlobalBlock”?

为什么“字符数组的初始化程序字符串太长”在C中编译良好,而在C ++中却没有?

如何在c中全局初始化变量,静态和外部有什么区别?

为什么初始化 mlocate 数据库需要这么长时间?

为什么 C# 中的局部变量必须在 If 运算符条件中初始化和强制转换后进行初始化?

有没有办法使用变量或用户输入来初始化 c# 中的对象

C# 隐式变量如果没有初始化它如何存储

我的 C# 程序没有按照我认为的对象初始化顺序初始化对象。为什么?

为什么在C ++ 11 / C ++ 14中针对自动和支撑初始化程序有特殊的类型推导规则?

为什么 IndexOrDocValuesQuery 需要这么长时间?

为什么排序需要这么长时间?

为什么mkntfs需要这么长时间?

C初始化程序元素不是常量[数组和变量之间有什么区别]

为什么这个MATLAB脚本要花这么长时间执行?

值初始化是C ++ 98标准的一部分吗?如果没有,为什么将它添加到C ++ 03标准中?

Java为什么没有C ++中的初始化列表?

为什么我的简单cpp-netlib程序需要这么长时间才能编译?

在一行中初始化C中的所有变量和未初始化的值