我试图将两个整数变量与同一个常量进行比较。显然,在这种情况下,两个变量都具有相同的默认值。我试着像这样简化比较语句:
if (po->app_tag == po->inst_id == 0)
return 1;
它不起作用。
我必须编写代码:
if ((po->app_tag == 0) && (po->inst_id == 0))
return 1;
使其成功。谁能向我解释两者之间的区别?不知怎的,我觉得C编译器在比较两个整数变量时应该有这种语法的规定。我可能是错的要求它.. :),但想了解一个原因..为什么我错了。
答案 0 :(得分:3)
由于==
运算符(从左到右关联)的相关性,
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。
答案 1 :(得分:1)
po->app_tag == po->inst_id == 0
将被解释为(po->app_tag == po->inst_id) == 0
- 也就是说,与0
进行比较的内容不是单独的两个变量,而是po->app_tag == po->inst_id
的结果。如果两个值相等,该操作将返回1
,如果不相等,则返回0
。实际上,po->app_tag == po->inst_id == 0
相当于po->app_tag != po->inst_id
,这不是您想要的。
答案 2 :(得分:0)
这是C / C ++编译器的工作方式。比较表达式只能比较两个变量。如果您想要更多,那么您将需要使用逻辑AND(&&
)或OR(||
)表达式。如果要将变量与多于两个 const 值进行比较,可以使用switch
语句。