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
(甚至sep
或i
的警告?
答案 0 :(得分:2)
您不会收到sep
,i
,j
的警告,因为这些变量在使用前会被赋予一个值:
for (i=0; ...
此行初始化i
。
for (j=i+1; ...
此行初始化j
。
sep = earthangle(time, planets[i], planets[j]);
此行初始化sep
。
但是,在执行此代码之前,没有任何内容可以为max
提供值:
if (sep>max)
所以在这一点上,从max
读取的值是不确定的;因此警告。