如果(Expr,Expr)结构在C?

时间:2010-11-20 07:40:30

标签: c

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

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

4 个答案:

答案 0 :(得分:9)

当你有“,”时,表达式的计算结果为列表中的最后一个表达式。

所以:1,3 == 3。

这也可以解释为:

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

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

答案 1 :(得分:5)

您所看到的是comma operator正在行动中。当你有

if(expr1, expr2)...
评估并丢弃

expr1,并在if语句中使用expr2的值。

答案 2 :(得分:2)

a, b首先评估a,然后评估b,整个表达式的值为b。所以例如(false, true)评估为真。

作为示例,您提供的表达式在执行赋值后的值为lcn。同样的事情可能是,更典型的是写if ((var = func()))(额外的括号可以抑制编译器警告,防止意外使用=而不是==。)

答案 3 :(得分:2)

你看到C comma operator在行动。

基本上,除了最后一个表达式之外的所有表达式都被评估但是它们的结果被丢弃然后评估最后一个并返回到表达式的其余部分。

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