C语言复合语句(语句块)

复合语句(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,那么该变量的存储空间会在语句块结束之后自动被释放。