我预计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 语句中有效,计算结果为 true。
实际上,除 0 以外的任何数字都将被解释为 true。
也许你已经知道了,但你没有在那里进行比较。比较操作==
。