赋值运算符是否可以在 if 语句中使用。好像使用了语句 布尔表达式 [duplicate]

Can assignment operator be used in if statements. As if statements are used Boolean expression [duplicate]

提问人: 提问时间:5/30/2020 最后编辑:Roberto Caboni 更新时间:11/2/2020 访问量:532

问:

我期待 中出现错误,因为赋值运算符用于 if 语句。if(b=5)

Code: 
#include <stdio.h> 

int main() {
        
    int a=10, b=10; 
    if(b=5)
        a--; 
    printf("%d, %d", a, b--);
    return 0;
}
c if 语句 逻辑运 赋值运算符

评论

3赞 Some programmer dude 5/30/2020
首先,选择一种语言。C 和 C++ 是两种截然不同的语言。其次,你的“怀疑”是什么?你的问题是什么?第三,除非源代码是可信的,否则不要直接从任何地方使用代码。谨防货物崇拜编程陷阱
0赞 Some programmer dude 5/30/2020
另外,请花一些时间阅读帮助页面,参加 SO 导览,阅读如何提问,以及这个问题清单。并了解如何编辑您的问题。
0赞 user207421 5/30/2020
你期待什么错误?为什么?
0赞 Mehroz Mustafa 5/30/2020
b = 5 实际上是一个表达式,所有表达式都给出一个真值。没有错误,但编译器将给出以下警告:C6282:运算符不正确:布尔上下文中的常量赋值。请考虑改用“==”
0赞 RobertS supports Monica Cellio 5/30/2020
在条件内进行赋值是有效的 C。赋值的计算结果为赋值。除赋值 的 之外,其他所有值都将计算为条件。if0true

答:

1赞 Roberto Caboni 5/30/2020 #1

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

if ( b == 5 )

if 语句中的表达式

if ( b = 5 )

实际上,其计算方式与 C 中的每个表达式相同。在这种情况下,它的计算值是赋值的值,并且由于它不是零,所以它等价于布尔表达式。5true

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

幸运的是,在许多编译器中都会发出警告。确保在编译器选项中启用所有警告,并且永远不要忽略它们。这样,您将在未来避免这些微妙的陷阱。

1赞 DeltA 5/30/2020 #2

if 语句中有一个有效的赋值。此类操作的结果是赋值 (5),该值在 if 语句中有效,计算结果为 true。

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

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