C:在子程序修复程序中分配局部变量,为什么?

时间:2015-09-13 15:10:07

标签: c gcc

Token

上面的代码编译并正常工作。但是,如果我在最大值后删除double earthmaxangle(double time, int arrsize, SpiceInt *planets) { double max=0, sep; int i,j; for (i=0; i<arrsize; i++) { for (j=i+1; j<arrsize; j++) { sep = earthangle(time, planets[i], planets[j]); if (sep>max) {max=sep;} } } return max; } ,则=0会向我发出此警告:

gcc -Wall -O2

更重要的是,该程序 无法正常工作。

为什么呢?为什么我没有得到&#34;未初始化的&#34;变量bc-planet-conjuncts.c: In function 'earthmaxangle': bc-planet-conjuncts.c:42: warning: 'max' may be used uninitialized in this function (甚至sepi的警告?

1 个答案:

答案 0 :(得分:2)

您不会收到sepij的警告,因为这些变量在使用前会被赋予一个值:

for (i=0; ...

此行初始化i

  for (j=i+1; ...

此行初始化j

    sep = earthangle(time, planets[i], planets[j]);

此行初始化sep

但是,在执行此代码之前,没有任何内容可以为max提供值:

    if (sep>max)

所以在这一点上,从max读取的值是不确定的;因此警告。