待到秋来九月八,我花开后百花杀
小论If(1 == i)和if(i == 1)的区别
对于更面向过程和学习的编写语言C语言,在编写过程中,经常看到一些大佬会写类似这样的程序:if( 5 == 1),其实它在语言中是与if(i == 5)相差无几的,而且后者的阅读性其实更高(对于大多数中国人自左向右的阅读习惯),但为什么还是更推荐前者呢?
先来个小对比
// An highlighted blockvar foo = 'bar';
#include <stdio.h>
int main()
{
int num = 1;
if(num == 5)
{
printf("hello!world");
}
}
// An highlighted blockvar foo = 'bar';
#include <stdio.h>
int main()
{
int num = 1;
if(5 == num)
{
printf("hello!world");
}
}
从C语言对这种需要判断的语句的远离来说,C语言中对条件的判断的成立条件一般是以0与非0判断的,0表示false,非0表示true。
对于上面的两个代码如果前者写成了这样:
// An highhlighted blockvar foo = 'bar';
int num = 5;
if(num = 1)
{
printf("hello!word");
}
哦吼!括号内意为将i赋值为1,1是非0,原本是false的语句变成了ture!
对于前期小段程序的编码,这样不小心的出错还是可以找得到的,但是如果后期几百上千行的编码,出这样一个错,编译器又不会报错,找错要找到第二年了!这是个可怕的事。
所以,为了避免开发者在if语句中不正确的赋值操作,c/c++的if语句一般会这么写:
// An highhlighted blockvor foo = 'bar';
int num = 5;
if(5 == num)
{
printf("hello!world");
}
因为我们可以对一个变量赋值i为1,但是不能对一个常量赋值1为i,这样写,即使不小心写成了”1 = i”,C/C++编译器也可以第一时间检查出来。