C if 语句将两个整数变量与同一个常量进行比较
C if statement comparing two integer variables to the same constant
我正在尝试将两个整数变量与同一个常量进行比较。显然在这种情况下,两个变量具有相同的默认值。我试图像这样简化比较语句:
if (po->app_tag == po->inst_id == 0)
return 1;
没用。
我不得不这样编码:
if ((po->app_tag == 0) && (po->inst_id == 0))
return 1;
让它发挥作用。任何人都可以向我解释两者之间的区别吗?不知何故,我觉得 C 编译器在比较两个整数变量时应该有这种语法的规定。我要求它可能是错误的.. :),但想了解一个原因..为什么我在这里错了。
po->app_tag == po->inst_id == 0
将被解释为 (po->app_tag == po->inst_id) == 0
- 也就是说,与 0
进行比较的不是单独的两个变量,而是 [=13 的结果=].如果两个值相等,则该操作将 return a 1
,如果不相等,则 0
。那么实际上,po->app_tag == po->inst_id == 0
等同于 po->app_tag != po->inst_id
,这不是您想要的。
这就是 C/C++ 编译器的工作方式。比较表达式只能比较两个变量。如果您想要更多,则需要使用逻辑 AND (&&
) 或 OR (||
) 表达式。如果你想比较一个变量有两个以上的 const 值,你可以使用 switch
语句。
由于 ==
运算符的结合性(从左到右结合),
po->app_tag == po->inst_id == 0
解释为:
(po->app_tag == po->inst_id) == 0
语言就是这样定义的。
使用
(po->app_tag == 0) && (po->inst_id == 0)
通过独立评估 po->app_tag == 0
和 po->inst_id == 0
并在这两者之间执行布尔 AND 来解决该问题。
有关运算符优先级和结合性的详细信息,请参阅 http://en.cppreference.com/w/c/language/operator_precedence。
我正在尝试将两个整数变量与同一个常量进行比较。显然在这种情况下,两个变量具有相同的默认值。我试图像这样简化比较语句:
if (po->app_tag == po->inst_id == 0)
return 1;
没用。
我不得不这样编码:
if ((po->app_tag == 0) && (po->inst_id == 0))
return 1;
让它发挥作用。任何人都可以向我解释两者之间的区别吗?不知何故,我觉得 C 编译器在比较两个整数变量时应该有这种语法的规定。我要求它可能是错误的.. :),但想了解一个原因..为什么我在这里错了。
po->app_tag == po->inst_id == 0
将被解释为 (po->app_tag == po->inst_id) == 0
- 也就是说,与 0
进行比较的不是单独的两个变量,而是 [=13 的结果=].如果两个值相等,则该操作将 return a 1
,如果不相等,则 0
。那么实际上,po->app_tag == po->inst_id == 0
等同于 po->app_tag != po->inst_id
,这不是您想要的。
这就是 C/C++ 编译器的工作方式。比较表达式只能比较两个变量。如果您想要更多,则需要使用逻辑 AND (&&
) 或 OR (||
) 表达式。如果你想比较一个变量有两个以上的 const 值,你可以使用 switch
语句。
由于 ==
运算符的结合性(从左到右结合),
po->app_tag == po->inst_id == 0
解释为:
(po->app_tag == po->inst_id) == 0
语言就是这样定义的。
使用
(po->app_tag == 0) && (po->inst_id == 0)
通过独立评估 po->app_tag == 0
和 po->inst_id == 0
并在这两者之间执行布尔 AND 来解决该问题。
有关运算符优先级和结合性的详细信息,请参阅 http://en.cppreference.com/w/c/language/operator_precedence。