keil里面为什么if条件满足了,但里面有一调语句执行不了?

#include<reg52.h>
#define uchar unsigned char
void main()
{
uchar a,num=0;
while(1)
{
a=2;
if(a>0)
{
num++;
a=0; // 这条不执行
}
if(num==15)
num=0;
}
}
请高手帮忙一下、不胜感激。

优化掉了。
无意义的局部变量赋值,编译器认为是可以砍掉的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-06-23
这句话不是没有执行,是因为每次执行后,开始循环,这个循环的开始阶段又将a的值复为,造成没有执行程序的假象,希望能对你有帮助!追问

我用单步调试了,确实没有执行,如果num==14;走到num++后直接到num=0;这一句了。

追答

那就是被编译器优化掉了!!

第2个回答  2012-06-29
因为a=2在while循环里,一直一直都是a=2,所以把a=2这句放在while前面一行就行了
第3个回答  2012-06-26
volatile uchar a ; //搞定!追问

我知道,已经试过了,可以,可是不知道为什么

追答

主要是后面用不上,就被优化掉了!我常常用:
a=0;
a++; a--;
的办法来保证不被优化。

相似回答