繁体   English   中英

在C中的if(Expr,Expr)结构?

[英]if(Expr,Expr) structure in C?

有人知道C中if(Expr,Expr)结构的逻辑含义是什么? 喜欢:

if(lcn = (ULONG)GetLCN(index),lcn)

当您有“,”时,该表达式将计算为列表中的最后一个表达式。

因此:1,3 == 3。

这也可以解释为:

lcn = (ULONG)GetLCN(index);
if (lcn) { .... }

他们为什么这么做,我不能说。

您正在看到的是逗号运算符 当你有

if(expr1, expr2)...

将评估并丢弃expr1 ,并在if语句中使用expr2的值。

a, b首先计算a ,然后是b ,整个表达式的值为b 因此,例如(false, true)评估为true。

作为示例,给出的表达式在执行赋值后具有lcn的值。 if ((var = func())) (额外的括号会抑制编译器警告,以防偶然使用=而不是== ),可能会是同一件事,并且更通常是这样写。

您正在看到C的逗号运算符在起作用。

基本上,除最后一个表达式外的所有表达式都被求值,但其结果被丢弃; 然后对最后一个求值并返回到表达式的其余部分。

因此,在您的情况下,将设置lcn ,然后进行检查(在if语句中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM