2011-03-01 56 views
5

我找了一些代碼,別人沒有,我看到:這是一個有效的C命令/指令嗎?

  if (numDetects == 0) { 

       Table[Index].minF = 

      Table[Index].maxF = F; 

      } 

表[索引] .minF =空白沒有任何意義,我。我從來沒有見過這樣的事。但代碼確實可以編譯和運行,所以有人可以向我解釋,如果這可能或不可能讓等號留在那裏?謝謝!

回答

7

是; C不關心第一線和第二之間的空格,所以把它看作

Table[Index].minF = Table[Index].maxF = F; 

這句法相當於

Table[Index].minF = (Table[Index].maxF = F); 

因爲賦值運算符=不僅賦予左一邊到右邊,但也返回分配的值。在這種情況下,該返回值又被分配給外部左側。

+1

這將我帶回。早期PC編譯器中的一個錯誤將內部()中的賦值解釋爲測試,所以會返回true - 因爲賦值發生了! - 所以設置minF爲1 – 2011-03-01 18:42:47

1

的空白將被忽略,所有的評價......

Table[Index].minF = Table[Index].maxF = F;

2

白色的空間並不重要。該行真的讀

Table[Index].minF = Table[Index].maxF = F; 

即相當於

int a; 
int b; 

a = b = 0; 
2

它等效於:

Table[Index].minF = Table[Index].maxF = F; 
6

是的,這是一樣的:

Table[Index].minF = Table[Index].maxF = F; 

的賦值運算符(=)可以像鏈接一樣任何其他運營商。它從右到左進行評估,每個評估都會返回已分配的值。所以這相當於以下兩條語句。

Table[Index].maxF = F; 
Table[Index].minF = Table[Index].maxF;