This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ccs5编译警告:#552-D variable "a" was set but never used,而且赋值语句没法执行

程序如下:

void main(void) {
int a;
a=100;
}
  • 警告是正常的,这个a就没有被使用,赋值语句没法执行具体是什么情况?

  • 如何判断没有被执行的。如果没有使用,还有可能被优化器优化了。

  • 就是a没有被赋值成100,程序停在赋值语句那边不动,找不到可执行的语句

  • 囧 说:

    如何判断没有被执行的。如果没有使用,还有可能被优化器优化了。

    就是a没有被赋值成100,程序停在赋值语句那边不动,找不到可执行的语句,加个volatile编译不会出现警告,但是最后也是执行不了赋值语句

  • 你的main函数只有这些吗?如果下面再加一个while(1); 会往下跑吗?

  • 点击restart,然后单步执行看是否能赋值。

  • 囧 说:

    你的main函��只有这些吗?如果下面再加一个while(1); 会往下跑吗?

    会往下跑,我的情况是:很久没搞那程序和软件了,今天用的时候往上加了条类似的幅值语句发现它不运行

  • Hank Zhao 说:

    点击restart,然后单步执行看是否能赋值。

    不行,看那个警告就是编译的时候已经有问题

  • jianfa cai 说:

    你的main函��只有这些吗?如果下面再加一个while(1); 会往下跑吗?

    会往下跑,我的情况是:很久没搞那程序和软件了,今天用的时候往上加了条类似的幅值语句发现它不运行

    [/quote]要是把变量的定义放在main函数之前声明成全局变量的话,后面那条赋值语句就可以正常编译了,不知道为什么会这样?

  • 如果你再定义一个b = 100, 然后在下面加一句a=a+b; 可以运行吗?

  • 囧 说:

    如果你再定义一个b = 100, 然后在下面加一句a=a+b; 可以运行吗?

    void main(void) {
     int a,b,i;
     a=100;
     b=100;
     for(i=0;i<10;i++)
      b=a+b;
    }

    弄成这样还是不行,还是只能单步运行,全速运行会停住报错:No source available for "0x3ff62a" ,只有把int a,b,i;这条语句放在main函数之前把它定义成全局变量时全速运行才能输出正确的结果

  • 囧 说:

    如果你再定义一个b = 100, 然后在下面加一句a=a+b; 可以运行吗?

    int a,b;
    void main(void) {
     int i;
     a=100;
     b=100;
      for(i=0;i<10;i++)
       b=a+b;

    }这样子全速运行也是可以得到结果的

  • 囧 说:

    如果你再定义一个b = 100, 然后在下面加一句a=a+b; 可以运行吗?

    int b;
    void main(void) {
     int a,i;
     a=100;
     b=100;
      for(i=0;i<10;i++)
       b=a+b;
    }这样子的话只把b声明成全局变量,全速运行的结果b是1100正确,但是a显示not found

  • 这是正常现象,局部变量在函数结束后就会被释放,所以是not found,但全局变量不会被释放。如果定义的是局部变量,在程序结尾加一个死循环,同样可以正常显示。

  • 在之前的程序
    void main(void) {
    int a;
    a=100;
    }中,单步执行完a=100;时其实也可以正常显示,但如果再继续往下执行,main函数就会结束,变量a被释放,就无法再显示a的值。
  • a显示not found的原因是,a是局部变量,你全速运行,只能观测全局变量的值,除非单步走进去才能看到局部变量的值,你之前的问题是所有的变量都是局部变量,所以在运行完后,又没有执行的语句,也没有保存的值,就会找不到地址。

  • Hank Zhao 说:

    这是正常现象,局部变量在函数结束后就会被释放,所以是not found,但全局变量不会被释放。如果定义的是局部变量,在程序结尾加一个死循环,同样可以正常显示。

    好的。谢谢