c语言局部变量和全局变量 求教!
本帖最后由 alextime 于 2013-7-22 16:39 编辑float min=0,max=0;
float score_aa={92,83,64,35,55,77,33,88,99,78}; //把数组定义成全局变量 只是为了仿真方便,仿真完毕即可改为局部变量,节省空间
float average(float score[],int n)
{
int i;
float sum = score;
max = min = score;
for(i=1;i<n;i++)
{
sum = sum + score;
if(max<score)max=score;
if(min>score)min=score;
}
return sum/n;
}
void main(void)
{
float avg = 0;
avg = average(score_aa,10);
}
Warning: variable "avg" was set but never used
不知道为什么???报这个警告 ,仿真也看不见avg的值 咽炎不懂啊
不过这个警告是说你的变量违背真正使用过,可能被优化调了 我的这个是照着教程写的??
难道教程错了?
是说你定义的全局变量avg没使用 这个警告基本上可以忽略 void main()
{
static float avg,score={10};
avg= average(score,10);
}
改成这就好了 为什么???? 编译器将avg优化掉了 但是没有传回来数值 本帖最后由 绿茶山人 于 2013-7-22 17:32 编辑
sum = sum + score;
if(max<score)max=score;
if(min>score)min=score;
你这几句什么意思,应该是score吧。
没返回值?!我用gcc就有返回值。 你定义的avg 啥都没干 函数执行完就释放了 编译器就警告 后面你定义那个又不会释放 avg定义以后确实没有被引用过, 因为avg声明和使用(函数返回值)之间是没有其他语句的的, 所以编译器会自动优化导致等效为
avg = average(score,10);
而之后avg没有引用过, 所以是 set 但是 没有 used。
如果你改变成 static int avg。 变量链接属性从auto变成了static, 这时候编译器不会做这种优化或检查, 因为语意上, static可能被这个函数的所有调用者共有。 alexjx 发表于 2013-7-22 17:55 static/image/common/back.gif
avg定义以后确实没有被引用过, 因为avg声明和使用(函数返回值)之间是没有其他语句的的, 所以编译器会自 ...
照你的方法 我改成这样了
void main(void)
{
float avg = 0,k=0;
avg = average(score_aa,10);
k = k + avg;
}
就不报错了
但是我给float avg = 0,k=0;
avg = average(score_aa,10);
这两句话之间加别的语句,照样还是会提示not used,为什么?求指教 float avg = 0,a=0;
a=a+100;
avg = average(score_aa,10);
这样会有错
float avg = 0,a=0;
a=a+avg;
avg = average(score_aa,10);
这样没有错
????不懂了
void main(void)
{
float avg = average(score_aa,10);
// a=a+avg;
// avg = average(score_aa,10);
// k = k + avg;
}
这样不是也没有调用么 为什么不报错呢?
页:
[1]