if 语句中可以使用赋值运算符吗? as if 语句使用了布尔表达式

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

我原以为 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;
}

您预计它会引发错误,因为它似乎是尝试使用比较运算符 == 的拼写错误,通常用在像这样的 if 语句中

if ( b == 5 )

if语句中的表达式

if ( b = 5 )

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

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

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

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

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

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