C if 语句将两个整数变量与同一个常量进行比较

标签 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 编译器在比较两个整数变量时应该有这种语法的规定。我要求它可能是错误的.. :),但想了解一个原因..为什么我在这里错了。

最佳答案

由于 == 运算符的结合性(从左到右结合),

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 并在这两者之间执行 bool AND 来解决该问题。

参见 http://en.cppreference.com/w/c/language/operator_precedence有关运算符优先级和结合性的更多信息。

关于C if 语句将两个整数变量与同一个常量进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39837900/

相关文章:

c - 使用管道发送消息 - C

c - 如何在C中获取数组中两个索引的总和?

python - 如何在 Python 中使用 IF ALL 语句

javascript - JavaScript 中有没有整数类型?

java - 如何使用 Java 中的 Swing 使我的代码在 GUI 中工作?

c - 这段代码声明了一个类型吗?

c - 查找素数并将其分配给数组

JavaScript OR on if 语句

python - 期望参数时的错误处理

java - 为什么 Integer.parseInt() 从字符串值中删除 0?