複合語句(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,那麼該變數的儲存空間會在語句塊結束之後自動被釋放。