= 不同于==
C语言中符号=作为赋值运算,==作为比较运算符。一般而言,赋值运算相对于比较运算出现得更为频繁,因此字符数较少的符号=就被用于赋值运算符,==用于比较运算符。此外,在C语言中赋值符号被作为一种操作符对待,因此重复进行赋值操作(如a=b=c)可以很容易地书写,并且赋值操作还可以被嵌入到更大的表达式中。
这就可能导致一个潜在的问题:把比较运算==,误写为赋值运算。如:
If(a=b)
Return 0;
该程序本意是检查a 与b 是否相等,如果相等则返回,而实际上是把b 的值赋给a ,然后检查该值是否为0,如果不为0,则返回。
再看下面的例子:
While(c=’ ‘ || c==’t’ || c==’ ’)
c=getc(f);
该程序的本意是,跳过文件中的空格符、制表符和换行符,但将==误写为=,造成实际上是把 ’ ‘ || c==’t’ || c==’ ’ ,赋值给c,然后判断c的值是否为0,显然字符’ ‘,的值不为0,整个表达式的值不为0,该循环会一直进行下去,直到整个文件结束。
小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:487875004适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程
另外,如果在if 语句中检查赋值运算的值是否为0,建议在表达式中直接判断,如:
If(a=b)
Func();
改写为:
If( (a=b)!=0)
Func();
另一方面,如果错把赋值运算=,写为比较运算==,同样会造成混淆,如:
If ( ( filedesc==open(argv[i],0) ) <0 )
return -1;
如果函数open 执行成功,则返回0 或正数,如果函数open 执行失败,则返回-1,。该程序的本意是将open 函数的返回值赋值给filedesc,如果open函数执行失败则返回-1。而实际上该程序是比较 filedesc 和open函数的返回值是否相等,结果只能是 1 或0,不可能会小于0 ,所以 return -1 ,将不会有机会被执行。