一次逻辑错误          

                                 作者:憨牛电子
我们经常使用if语句后面跟一串的条件如

  if(a==3 || a==5 || a==10 )              <1>
   goto out;
   c=2; 
out: _nop_();

也就是a满足任一个条件都可以执行goto out;.三个条件都不满足时才去执行c=2,但为满足我们的要求时有时要用到!=(即不等),前几天工作中就这样写了。

   if(a!=3 || a!=5 || a!=10)              <2>  
   goto out;   
   c=2;
out: _nop_();


我发现在调试时指针总是向goto out;处跑无论如何也不去执行c=1;这使我非常头痛,这么一个

简单的逻辑怎么通不过,恼火、非常恼火。静下心来分析一下逻辑还是我写的有问题,分析如下:

   a为一个数时必然使一个条件得到满足,你可以想来,<1>处还有可能不执行c=2.就是

a为3或5或10时都可以不用执行c=2;a不是这三个数时就必须执行c=2;到<2>中可就不是一样

了,a 是任何一个数时都会便等式得到满足执行goto out;也就是a为任何一个数时都会使(

a!=3 ||a!=5 || a!=10)为1即为true 故每次都要去执行goto out;.

同志,是不是这样,这就是我们的思维一个惯性,把等逻辑也用不等来做同样的处理得到可笑的

结论,希望给后来者在此竖起一个警示牌,免得掉进自以为非常简单的陷阱中。--还总以为人

家的编译器有问题。:)