看許多大牛寫的程序常常看到if(0==x){執行體},而自己寫的程序常常使用if(x==0){執行體}。剛開始的時候我還很自信的認爲這種表達方式是等價的,大牛們只是爲了顯擺下與衆不同的格調。當讀到C語言運算法結合性這部分的內容才恍然領悟大牛的考慮周全。分析過程如下:
“=”運算符的結合性是右結合(從右向左)"=="運算符的結合性是左結合。
0=i這種格式錯誤的 0==i和i==0是一樣的。
看到這大家是不是明白了點。if(0==i)這麼寫的,是爲了防止“==”寫成“=”。如果不小心將“==”寫成“=”
如何採用if(x==0)形式寫就變成了if(x=0),即使寫錯編譯器也不會報錯。如果採用if(0==x)形式寫就變成了if(0=x),編譯器就給出報錯。在VC中會報error C2106: “=”: 左操作數必須爲左值的錯誤。
寫個程序測試下:
// Test_zeroeqx.cpp : 定義控制檯應用程序的入口點。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int x=0;
/*大牛的寫法*/
if(0==x)
printf("x=0");
else if(0!=x)
printf("x!=0");
/*一般人的寫法當x==0寫成了x=0程序正常執行 結果是x=0 x!=0*/
if(x=0)
printf("x=0");
else if(x!=0)
printf("x!=0");
/*去掉註釋可以看出x=0返回false值*/
/*
bool isZero;
isZero=(x=0);
if(isZero)
printf("x=0返回false")
else
printf("x=0返回false");
*/
getchar();
return 0;
}
從測試程序可以看出,x=0返回false值。如果將"=="不小心寫成"=",如果按照一般人的寫法,我們很難發現錯誤。而是用大牛的寫法,編譯器直接報錯。