【问题标题】:Can assignment operator be used in if statements. As if statements are used Boolean expression [duplicate]if 语句中可以使用赋值运算符吗? As if statements are used 布尔表达式 [重复]
【发布时间】:2020-09-17 21:50:06
【问题描述】:

我预计 if(b=5) 会出错,因为 if 语句中使用了赋值运算符。

Code: 
#include <stdio.h> 

int main() {
        
    int a=10, b=10; 
    if(b=5)
        a--; 
    printf("%d, %d", a, b--);
    return 0;
}

【问题讨论】:

  • 首先选择一种语言。 C 和 C++ 是两种 非常 不同的语言。其次,你的“怀疑”是什么?你的问题是什么?第三,除非来源是可信的,否则不要直接从任何地方使用代码。当心the cargo cult programming trap
  • 另外,请花一些时间阅读the help pages,接受SO tour,阅读How to Ask,以及this question checklist。并了解如何edit您的问题。
  • 您期待什么错误?为什么?
  • b = 5 实际上是一个表达式,所有表达式都给出一个真值。没有错误,但编译器会给出以下警告:C6282:不正确的运算符:布尔上下文中的常量赋值。考虑改用“==”
  • if 条件内进行赋值是有效的 C。分配评估为分配的值。除了分配的 0 值之外的所有内容都会评估为 true 条件。

标签: c if-statement logical-operators assignment-operator


【解决方案1】:

您预计它会引发错误,因为尝试使用比较运算符 == 时似乎是一个错字,通常用于这样的 if 语句中

if ( b == 5 )

if 语句中的表达式

if ( b = 5 )

实际上像 C 中的每个表达式一样被计算。在这种情况下,它的计算是赋值 5 的值,并且由于它不为零,它等效于布尔表达式中的 true

这可能是一个微妙的错字,因此作者可能进行了比较而不是那个分配。无论如何它不会引发错误,因为 它是有效的 C

幸运的是,在许多编译器中都会引发警告。确保在编译器选项中启用所有警告,并且永远不要忽略它们。这样你以后就可以避开这些微妙的陷阱了。

【讨论】:

    【解决方案2】:

    在 if 语句中有一个有效的赋值。这种操作的结果是赋值 (5),它在 if 语句中是有效的,并且计算结果为 true。

    实际上,0 以外的任何数字都将被解释为真。

    也许你已经知道了,但你没有在那里进行比较。比较操作是==

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 2019-01-02
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多