C - 循环中的逗号 vs && 运算符和 if-else



考虑代码:

if(x = a/b, a%b) 
 printf("do this");
else 
 printf("do that");

现在,如果我用if(x = a/b && a % b)替换if语句。然后它也起作用。所以我想知道,用&&运算符替换逗号,反之亦然,在if-else and loops 中总是有效还是无效

它们完全不同!


在第一个示例中,,是逗号运算符,它是一个二进制运算符,用于计算第一个操作数并丢弃结果,然后计算第二个操作数,并返回此值(和类型(。

所以,

if(x = a/b, a%b) 

相当于(多亏了@jaket(

x = a/b;
if(a%b) 

a%b将始终被评估。


第二个:

if(x = a/b && a % b)

相当于

x = (a/b) && (a%b);
if( x )

只有当a/b(即a/b不为零(为真时,才会评估a%b

如果用&,你稍微改变了一下逻辑。逗号运算符所做的是,它将执行x=a/b并"丢弃结果",即不考虑if条件,只考虑a%b。

如果你做

if(x = a/b && a % b)

则当且仅当a/b为非零且a%b为非零时,才会打印"do this"。而使用逗号运算符时,只有当%b为非零时,才会打印"do this"。

if(x = a/b, a%b)

是一种模糊、不可读的书写方式

x = a/b;
if(a%b)

但是

x = a/b && a % b

相当于

x = ( (a/b) && (a%b) );

总之,不要在同一条线上混合很多不同的运算符。你用它实现的唯一的事情是在制造bug的同时混淆自己。

&运算符在确定表达式x = a/b && a%b时也强制考虑a/b的结果。在,的情况下,忽略a/b的结果。因此,用&&替换,并不总是有效的。这不是正确的做法,

相关内容

  • 没有找到相关文章

最新更新