C if语句将两个整数变量比较为相同的常量

时间:2016-10-03 18:14:52

标签: c if-statement integer constants comparison-operators

我试图将两个整数变量与同一个常量进行比较。显然,在这种情况下,两个变量都具有相同的默认值。我试着像这样简化比较语句:

if (po->app_tag == po->inst_id == 0)
   return 1;

它不起作用。

我必须编写代码:

if ((po->app_tag == 0) && (po->inst_id == 0))
   return 1;

使其成功。谁能向我解释两者之间的区别?不知怎的,我觉得C编译器在比较两个整数变量时应该有这种语法的规定。我可能是错的要求它.. :),但想了解一个原因..为什么我错了。

3 个答案:

答案 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 == 0po->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语句。