alextime 发表于 2013-7-22 16:10:30

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的值

tim 发表于 2013-7-22 16:14:01

咽炎不懂啊
不过这个警告是说你的变量违背真正使用过,可能被优化调了

alextime 发表于 2013-7-22 16:21:15

我的这个是照着教程写的??
难道教程错了?

68336016 发表于 2013-7-22 16:23:43

是说你定义的全局变量avg没使用

tim 发表于 2013-7-22 16:24:10

这个警告基本上可以忽略

alextime 发表于 2013-7-22 16:25:49

void main()
{
static float avg,score={10};
avg= average(score,10);


}
改成这就好了   为什么????

fzkqi 发表于 2013-7-22 16:34:20

编译器将avg优化掉了

alextime 发表于 2013-7-22 16:36:28

但是没有传回来数值

绿茶山人 发表于 2013-7-22 17:21:33

本帖最后由 绿茶山人 于 2013-7-22 17:32 编辑

sum = sum + score;
if(max<score)max=score;
if(min>score)min=score;

你这几句什么意思,应该是score吧。

没返回值?!我用gcc就有返回值。

卖菜老汉 发表于 2013-7-22 17:44:31

你定义的avg 啥都没干 函数执行完就释放了 编译器就警告 后面你定义那个又不会释放

alexjx 发表于 2013-7-22 17:55:35

avg定义以后确实没有被引用过, 因为avg声明和使用(函数返回值)之间是没有其他语句的的, 所以编译器会自动优化导致等效为
avg = average(score,10);
而之后avg没有引用过, 所以是 set 但是 没有 used。

如果你改变成 static int avg。 变量链接属性从auto变成了static, 这时候编译器不会做这种优化或检查, 因为语意上, static可能被这个函数的所有调用者共有。

alextime 发表于 2013-7-23 10:26:11

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,为什么?求指教

alextime 发表于 2013-7-23 10:32:34

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);
这样没有错

????不懂了

alextime 发表于 2013-7-23 10:38:34

void main(void)
{
float avg = average(score_aa,10);

// a=a+avg;

// avg = average(score_aa,10);

// k = k + avg;


}

这样不是也没有调用么 为什么不报错呢?
页: [1]
查看完整版本: c语言局部变量和全局变量 求教!