在 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<0n");
}
在上面的程式碼中,if 語句的本意是將變數 y 的值賦給變數 x,然後再判斷變數 x 的值是否小於 0。如果變數 x 的值小於 0,就執行語句 printf("y<0n")。由於錯誤地將賦值操作符“=”誤寫成等於操作符“==”,所以無論變數 y 為何值,都不會執行語句 printf("y<0n")。原因是等於操作符“==”的結果只能是 0 或 1,永遠不會小於 0。
除此之外,為了防止將等於操作符“==”誤寫成賦值操作符“=”,還可以在程式碼中採用如下形式:
int x=0;
if(0==x)
{
}
這樣,就可以在一定程度上避免誤寫的發生。