C語言複合語句(語句塊)

2020-07-16 10:04:20
複合語句(compound statement)簡稱為語句塊,它使用大括號把許多語句和宣告組合到一起,形成單條語句。

{ [宣告和語句的列表] }


語句塊與簡單的語句不同,語句塊不用分號當作結尾。當出現語法上某處需要一條語句,但程式卻需要執行多條語句時,就可以用到語句塊。例如,可以在 if 語句中使用語句塊,或者當迴圈體需要執行多條語句時,也可以使用語句塊:
{ double result = 0.0, x = 0.0;         // 宣告
  static long status = 0;
  extern int limit;
  ++x;                                  // 語句
  if ( status == 0 )
  {                                     // 新語句塊
     int i = 0;
     while ( status == 0 && i < limit )
     { /* ... */ }                      // 另一個語句塊
  }
  else
  { /* ... */ }                         // 第三個語句塊
}

如果語句塊內需要有宣告,通常會把宣告放在語句塊的頭部,在其他語句之前。然而,C99 並不強制這麼做,允許將宣告放在語句塊內的任何地方。

在語句塊內宣告的名稱將具有語句塊作用域。換句話說,這些名稱只有自宣告點開始,一直到語句塊結尾之前有效。在這個作用域內,這種宣告會把在語句塊以外宣告的同名稱物件隱藏起來。

同樣地,動態變數的儲存週期也被限制在語句塊中它們生成的地方。這意味著,如果一個變數沒有被宣告為 static 或 extern,那麼該變數的儲存空間會在語句塊結束之後自動被釋放。