zhaoqingtao007 发表于 2014-3-3 22:01

实在是无法解决的C语言问题

今天调程序的时候,发现一个奇怪的问题,说我二维数组定义了没有使用,我明明在函数里面使用了。好奇怪,大神求解决!
warning:#550-D: variable "xy" was set but never used
void Read_IO_XY(u16 *x, u16 *y)                                 //读取10次,取平均值
{
      u16 xy;
      u8 cnt;
      
      cnt = 0;
      while((Pen_State == 0) && (cnt < 10))
      {
                if(1 == Read_IO_ADS())
                {
                        xy = Pen.X0;
                        xy = Pen.Y0;
                        cnt++;
                }      
      }      
}

sqmm 发表于 2014-3-3 23:22

不会是其他函数内还有xy变量吧

香水橙 发表于 2014-3-3 23:38

有一种可能性,就是这句话永远不成立:if(1 == Read_IO_ADS());即Read_IO_ADS()永远不等于1。这种情况下,编译器把下面三行优化掉了。

xinzha 发表于 2014-3-4 10:04

我猜Pen_State是个来自于硬件寄存器的值,而定义这个值的时候没有使用volatile,而且这个值的初始定义不是1

杨爱林林 发表于 2014-3-4 11:06

数组xy 为右值 才算使用

WYT440 发表于 2014-3-4 11:47

数组在if条件语句里面,有可能会被优化掉的,if后面加个else对数组进行操作试试

ayb_ice 发表于 2014-3-4 14:42

极有可能是
if(1 == Read_IO_ADS())

这个条件永远不成立

zzj025 发表于 2014-3-4 16:49

导致这个警告是因为 u16 xy只是局部变量,编译器的警告指示告诉你,这个变量虽然赋值了,但没有意义,函数退出变量就不存在了

q553178245 发表于 2014-3-4 17:32

楼上正解.

江枫渔火 发表于 2014-3-4 18:18

正确答案是5楼,其他楼层不是。请注意!

myxiaonia 发表于 2014-3-4 19:04

为擦,那个坛上一模一样的问题哈哈哈

niuyaliang 发表于 2014-3-4 20:01

杨爱林林 发表于 2014-3-4 11:06 static/image/common/back.gif
数组xy 为右值 才算使用

同意五楼的,只有在右面才算使用

香水橙 发表于 2014-3-4 21:32

同意5楼,疏忽了,:L:L

ifpga 发表于 2014-3-4 21:48

代码是有问题
xy 会被优化掉

sedatefire 发表于 2014-3-4 21:56

智能编译器的原则是
1.只有写入而没有读出的数据是没有意义的。
2.只有读出,没有写入的数据区,是非法的,被警告的。

编译器有许多关键字来显示表明这些特殊内存区,比如unused等

dictionary 发表于 2014-3-5 08:33

你只是将数据放了进去,更本就没使用过,从数组的 分配 到 释放,更本就没参与运算过。你把数据放入数组然后再释放数组 这样算是用过leme
?

HORSE7812 发表于 2014-3-5 08:42

:)

58HEYANG 发表于 2014-3-5 16:45

嗯,五楼厉害!

nashouat 发表于 2014-3-5 22:02

杨爱林林 发表于 2014-3-4 11:06 static/image/common/back.gif
数组xy 为右值 才算使用

正解

bobde163 发表于 2014-3-7 23:47

学习了
页: [1] 2
查看完整版本: 实在是无法解决的C语言问题