C中的if(Expr,Expr)结构?
任何人都知道C中if(Expr,Expr)结构的逻辑意义是什么? 比如: 当有“,”时,表达式将计算为列表中的最后一个表达式 所以:1,3==3 这也可以解释为:C中的if(Expr,Expr)结构?,c,C,任何人都知道C中if(Expr,Expr)结构的逻辑意义是什么? 比如: 当有“,”时,表达式将计算为列表中的最后一个表达式 所以:1,3==3 这也可以解释为: lcn = (ULONG)GetLCN(index); if (lcn) { .... } 我不知道他们为什么这样做。a,b首先计算a,然后计算b,整个表达式的值为b。例如,(false,true)的计算结果为true 例如,在执行赋值后,您给出的表达式的值为lcn。如果((var=func())(额外的括号抑制了编译器警告,以防止
lcn = (ULONG)GetLCN(index);
if (lcn) { .... }
我不知道他们为什么这样做。
a,b
首先计算a
,然后计算b
,整个表达式的值为b
。例如,(false,true)
的计算结果为true
例如,在执行赋值后,您给出的表达式的值为lcn
。如果((var=func())(额外的括号抑制了编译器警告,以防止意外使用=
而不是=
),则编写。您看到了C的作用
基本上,除了最后一个表达式之外,所有表达式都被计算,但其结果都被丢弃;然后计算最后一个并返回到表达式的其余部分
因此,在您的情况下,lcn
正在设置,然后进行检查(在if
语句中)。您看到的是正在运行的。当你有
if(expr1, expr2)...
expr1
被求值并丢弃,并且在if语句中使用expr2
的值。当赋值求值到赋值时,他们很可能将其保留为if(lcn=(ULONG)GetLCN(index))
,有些人喜欢用一组额外的括号来表示,=
in和if
子句是故意的:if((lcn=(ULONG)GetLCN(index))
。我感觉有人对GCC的括号警告感到恼火,只是在其中添加了逗号操作符:)嗨,欢迎来到StackOverflow!一些提示:(1)你应该使用至少两个换行符来分隔段落,(2)你应该通过突出显示代码并单击编辑区域顶部的“101010”按钮来格式化代码。(您也可以用四个空格缩进)希望您在这里过得愉快!
if(expr1, expr2)...