簡體   English   中英

'if' 語句中的賦值和比較順序

[英]Order of assignment and comparison in an 'if' statement

看代碼:

int i = 5;
if (i = 0)
{
  printf ("Got here\n");
}

C 標准對要打印的內容有什么規定? 或者更一般地說,分配是先發生還是比較?

§6.8.4 說if選擇語句的語法是:

if ( expression ) 

在本節中,它提到如果表達式比較不等於 0,則執行statement 因此,必須先計算表達式,然后才能將其與 0 進行比較i = 0是計算結果為 0 的表達式。有關進一步的參考,請參閱第 6.5.16 節“賦值運算符”的第 6.5 節“表達式”,特別注意這段摘錄:

賦值運算符將值存儲在左操作數指定的對象中。 賦值表達式在賦值后具有左操作數的值,但不是左值。

首先分配作業,因為它是評估的一部分。 賦值表達式返回分配的值,因此表達式的計算結果為 false。

i=0評估為 0,因此不會發生輸出。

先前的分配(源代碼的第一行)與結果無關。

語句i = 0將被評估並返回0 ,因此不會打印該語句。

分配發生的時間無關緊要。 相關的是i=0作為表達式的值,它被定義為值為 0。

賦值發生了,它返回一個 0,它是假的。

先計算 if 子句的表達式,結果為 0。

這個程序永遠不會打印“Got here\n”。

正如其他人已經說過的那樣,賦值返回被賦值的值,因此從不打印語句。 如果您希望打印該語句,則必須使用if (i = -1)

什么都不會打印。 將 0 分配給 i ,然后對該值進行條件測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM