c语言 bool_为什么C语言条件判断(等于)这么写?

a2dea0a79cc26d17b73c6325768c74e8.png

​首先我们看一个C示例

// 示例1while(status == 1){    printf("this is a test code!");}
// 示例2while(1 == status){    printf("this is a test code!");}

示例1和示例2达到的目的均是判断status与1是否相等,相等则返回true进入循环,不相等则跳过循环,但是通常会推荐使用示例2的写法,为什么呢?

我们来回顾一下C的一些基本概念

赋值运算符:=

在C语言中,=并不意味着“相等”,而是一个赋值运算符。下面的赋值表达式语句

status = 1;

把值1赋给变量status。也就是说,=号左侧是一个变量名,右侧是赋给该变量的值。符号=被称为赋值运算符。另外,上面的语句不读作“status等于1”,而读作“把值1赋给变量status”。赋值行为从右往左进行。

在C语言中,类似这样的语句没有意义(实际上是无效的)

1 = status;

在这种情况下,不能给常量赋值,常量本身就是它的值。

实际上,赋值运算符左侧必须引用一个存储位置。最简单的方法就是使用变量名。因此,上述写法在C语言编译过程中会提示错误。

关系运算符(等于):==

关系运算符等于常常用于左值和右值的比较,返回值为bool类型。通常用于循环结构和分支结构。

我们再回过头来看示例

当示例1不小心写成如下形式

// 示例1while(status = 1){    printf("this is a test code!");}

此时,编译器并不会报错(当然有些编译器会提供警告,提醒开发者是否确定要使用赋值语句),上述语句表示将值1赋给变量status,这与我们的设计初衷是不同的。

当示例2不小心写成如下形式

// 示例2while(1 = status){    printf("this is a test code!");}

此时,编译器会报错,报错相比于警告,对开发者的警醒作用往往要大的多。

一个即将脱发还未脱发的坚持将技术分享到脱发的90后,随手点赞转发评论,支持我,Peace!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值