首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以在if语句中赋值吗?

问我们可以在if语句中赋值吗?
EN

Stack Overflow用户
提问于 2019-03-01 15:09:53
回答 3查看 1.4K关注 0票数 2
代码语言:javascript
复制
#include <stdio.h>
void main()
{
    int x = 0;
    if (x = 0)
      printf("It's zero\n");
    else
      printf("It's not zero\n");
}

为什么if (x = 0)语句不是一个错误?我们可以在if语句中指定这样的值吗?为什么不生成错误,为什么要执行else语句?

EN

回答 3

Stack Overflow用户

发布于 2019-03-01 15:12:09

是的,它允许在if语句中赋值。这非常方便,特别是当您想调用函数并检查它的返回是否出错时:

代码语言:javascript
复制
int rc;
if ((rc = check())) {
    // here rc is non-zero, often an indication of a failure
}

注意我是如何在我的赋值周围加上一个额外的括号--因为它是一个无所不在的混乱源,所以编译器通常会警告if块中的赋值,假设您可能做了一个错误。额外的括号使编译器清楚地知道这就是我的意图。

顺便说一句,这里没有特殊的异常,这种语法的有效性源于一般的C语法-赋值运算符计算为赋值。

票数 4
EN

Stack Overflow用户

发布于 2019-03-01 15:11:10

是的,这是一个完全有效的语法,没有理由不允许这样做。

引用C11的话,

..。赋值表达式具有赋值后左操作数的值。..。

因此,存储在LHS操作数中的值将用于if语句条件评估。

在您的示例中,变量x在赋值后保存值0,而if (0)是FALSY,这就是执行else块的原因。

然而,在大多数情况下,这种语法使用错误,而不是比较。这就是为什么大多数编译器在这个结构上发出警告消息的原因。

警告:建议将赋值周围的括号用作真值-Wparentheses 如果(x = 0) ^

如果您确定要做什么,可以使用赋值表达式将if条件包装在另一对括号中,这样就更好了。

票数 3
EN

Stack Overflow用户

发布于 2019-03-01 15:18:30

在C语言中,if语句的唯一要求是它包含一个表达式。语句的真实性取决于表达式的计算值是否为零。

赋值运算符也计算为赋值,因此if(a = 0)为false,而if(a = x)为x != 0为真。

由于赋值操作符是一个表达式,所以将其放在if语句中是可以接受的,尽管初学者经常犯的错误是在他们打算使用相等测试操作符==的地方使用赋值操作符。

避免这种错误的一种方法是,如果比较的任何一方都是r值,将其放在左边,这样如果您不小心使用= (您的意思是== ),您将得到一个编译错误。比较:

代码语言:javascript
复制
if(p = NULL) // Valid syntax
    ...

if(NULL = p) // Syntax error
    ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54947344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档