ブロック・ステートメント

ブロック・ステートメント または複合ステートメント を使用すると、任意の数のデータ定義、宣言、およびステートメントを 1 つのステートメントにまとめられます。 1 組の中括弧に囲まれた定義、宣言、およびステートメントはすべて、 単一のステートメントとして扱います。 単一のステートメントが使用可能な場所ならばどこでもブロックを使用する ことができます。

ブロック・ステートメントの形式は、次のとおりです。

      .----------------------------------.  .---------------.
      V                                  |  V               |
>>-{----+------------------------------+-+----+-----------+-+--}-><
        +-type_definition--------------+      '-statement-'
        +-file_scope_data_declaration--+
        '-block_scope_data_declaration-'
 
 

C C89 言語レベルでは、定義および宣言はステートメントの前に配置しなければなりません。

C99 言語レベルの C および Standard C++ および C++98 では、宣言および定義を任意の位置に配置し、 他のコードと混在させることができます。

ブロックは、ローカル・スコープを定義します。 データ・オブジェクトがブロック内で使用可能であり、その ID が再定義されていない場合には、 ネストされたすべてのブロックが、そのデータ・オブジェクトを使用できます。

ブロックの例

以下のプログラムは、ネストされたブロック内でデータ・オブジェクト の値がどのように変更されるかを示しています。

 /**
  ** This example shows how data objects change in nested blocks.
  **/
   #include <stdio.h>
 
   int main(void)
   {
      int x = 1;                     /* Initialize x to 1  */
      int y = 3;
 
      if (y > 0)
      {
         int x = 2;                  /* Initialize x to 2  */
         printf("second x = %4d¥n", x);
      }
      printf("first  x = %4d¥n", x);
 
      return(0);
   }

プログラムは、以下の出力を作成します。

second x = 2
first  x =    1

x という名前の 2 つの変数が main の中で定義されています。 x の最初の定義は、main が実行されている間、ストレージを保存します。 しかし、x の 2 番目の定義 (再定義) がネストされたブロック内で発生するため、 printf("second x = %4d¥n", x); は、x を前の行で定義された変数であると認識します。 printf("first x = %4d¥n", x); は、 ネストされたブロックの一部ではないので、x は、x の最初の定義として認識されます。

関連参照

IBM Copyright 2003