《编写高质量代码:改善c程序代码的125个建议》——建议15-1:避免“=”与“==”混淆

简介:

本节书摘来自华章计算机《编写高质量代码:改善c程序代码的125个建议》一书中的第2章,建议15-1,作者:马 伟 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

建议15-1:避免“=”与“==”混淆

在C语言中,最容易产生混淆的操作符要属“=”与“==”。其中,“=”并不等于符号,而是赋值操作符,如x=3。除此之外,还可以在一个语句中向多个变量赋同一个值,即多重赋值。例如,在下面代码中把0同时赋给x、y与z。

x = y = z = 0

相对于只有一个等号的赋值操作符,关系操作符中的等于操作符采用两个等号“==”来表示。正因如此,导致了一个潜在的问题:出于习惯,我们可能经常将需要等于操作符的地方写成赋值操作符,如下面的代码:

int x=10;
int y=1;
if(x=y)
{
    /*处理代码*/
}

在上面的代码中,if语句看起来好像是要检查变量x是否等于变量y。实际上并非如此,此时if语句将变量y的值赋给变量x并检查结果是否为非零。因此,虽然这里的x不等于y,但是y的值为1,if语句还是会返回真。
当然,当确实需要先对一个变量进行赋值之后再检查变量是否非零时,可以考虑显式给出比较符。示例代码如下:

int x=10;
int y=1;
if((x=y)!=0)
{
    /*处理代码*/
}

这样,程序的可读性就得到了很大提高。
上面的示例代码详细地阐述了将等于操作符“==”误写成赋值操作符“=”所带来的严重后果。同理,将赋值操作符“=”误写成等于操作符“==”也会带来非常严重的后果。示例代码如下:

int x=0;
int y=-1;
if((x==y)<0)
{
    printf("y<0\n");
}

在上面的代码中,if语句的本意是将变量y的值赋给变量x,然后再判断变量x的值是否小于0。如果变量x的值小于0,就执行语句printf("y<0n")。由于错误地将赋值操作符“=”误写成等于操作符“==”,所以无论变量y为何值,都不会执行语句printf("y<0n")。原因是等于操作符“==”的结果只能是0或1,永远不会小于0。
除此之外,为了防止将等于操作符“==”误写成赋值操作符“=”,还可以在代码中采用如下形式:

int x=0;
if(0==x)
{
}

这样,就可以在一定程度上避免误写的发生。

相关文章
|
存储 C语言
《编写高质量代码:改善c程序代码的125个建议》—— 导读
众所周知,C语言是一门既具有高级语言特点,又有汇编语言特点的通用计算机编程语言,无论是操作系统(如Microsoft Windows、Mac OS X、Linux和UNIX等)、嵌入式系统与普通应用软件,还是目前流行的移动智能设备开发,随处都可以看见它依然矫健的身影。
1768 0