关于逻辑运算符“&&““||”的问题

1. 短路问题

逻辑运算符 &&,|| 的 “短路问题”。

先看一个例子:

代码
int main(void)
{
   int x, y;
   x=y=0;
   x || ++y;
   printf("%d,%d\n",x,y);
   x=y=0;
   x && ++y;
   printf("%d,%d\n,x,y");
}

输出结果:0,1 及 0,0

在(x && ++y)语句中,机器执行此语句时,由于 x=0 为假,无论后面语句为真还是假,此语句结果皆为假,所以,++y并没有执行;同理,|| 语句也一样。

这就给我们一个注意点,在使用 && 或 || 语句一定要注意语句的真实逻辑关系,这个问题,尤其在单片机开发中尤为重要。

2. 分号使用

C语言中一定要注意分号的使用,如:

代码
if(x>b) b=x;

如果多加分号:

代码
if(x>b); b=x;

则变为:b=x,无论任何时候都执行;if的判断语句只是执行了一个空语句。