名前空間
変種
操作

提供: cppreference.com
< c‎ | language

文は順番に実行される C のプログラム片です。 あらゆる関数の本体は複文であり、複文は文と宣言の並びです。

int main(void)
{ // 複文の始まり
    int n = 1; // 宣言 (文ではありません)
    n = n+1; // 式文
    printf("n = %d\n", n); // 式文
    return 0; // return 文
} // 複文の終わり、関数本体の終わり


文は5種類あります。

1) 複文
2) 式文
3) 選択文
4) 繰り返し文
5) ジャンプ文

目次

[編集] ラベル

あらゆる文には、その文の前に名前とコロンを記述することで、ラベルを付けることができます。

identifier : statement (1)
case constant_expression : statement (2)
default : statement (3)
1) goto のジャンプ先
2) switch 文の case ラベル
3) switch 文の default ラベル

いかなる文 (宣言は除く) にも、任意の数のラベルを付けることができます。 それぞれのラベルは identifier をラベル名とする宣言であり、その関数内で一意でなければなりません (言い換えると、ラベル名は関数スコープを持ちます)。

ラベル宣言は、それ自体は何の効果もなく、フロー制御に影響を与えることもなく、後続の文の動作を変えることも一切ありません。

[編集] 複文

複文 (またはブロック) は、波括弧で囲まれた文と宣言の並びです。

{ statement | declaration...(オプション) } (1)

複文を使うと、宣言と文の集合をひとつの単位にグループ化できます。 ひとつの文が期待されているところ (例えば if 文や繰り返し文など) で使うことができます。

if (expr) // if 文の始まり
{ // ブロックの始まり
  int n = 1; // 宣言
  printf("%d\n", n); // 式文
} // ブロックの終わり、 if 文の終わり

それぞれの複文はそれ自身のブロックスコープを導入します。

自動記憶域期間を持つ変数の初期化子はブロック内部で宣言されます。 VLAの宣言子は文であるかのようにフロー制御が宣言に達したときに順番に実行されます。

int main(void)
{ // ブロックの始まり
  { // ブロックの始まり
       puts("hello"); // 式文
       int n = printf("abc\n"); // 宣言、「abc」を表示し、 n に 4 を格納します
       int a[n*printf("1\n")]; // 宣言、「1」を表示し、 8*sizeof(int) バイトを確保します
       printf("%zu\n", sizeof(a)); // 式文
  } // ブロックの終わり、 n と a のスコープの終わり
  int n = 7; // n は再使用できます
}

[編集] 式文

式の後にセミコロンを付けると文になります。

expression(オプション) ; (1)

一般的な C のプログラムでは、ほとんどの文は代入や関数呼び出しなどの式文です。

式のない式文は空文と呼ばれます。 forwhile ループに空の本体を記述するときにしばしば使われます。 複文の終わりや宣言の前にラベルを付けたいときにも使うことができます。

puts("hello"); // 式文
char *s;
while (*s++ != '\0')
    ; // 空文

[編集] 選択文

選択文は、式の値よっていくつかの文のうちのひとつを選ぶ文です。

if ( expression ) statement (1)
if ( expression ) statement else statement (2)
switch ( expression ) statement (3)
1) if
2) else 節付きの if
3) switch

[編集] 繰り返し文

繰り返し文は、文を繰り返し実行する文です。

while ( expression ) statement (1)
do statement while ( expression ) ; (2)
for ( init_clause ; expression(オプション) ; expression(オプション) ) statement (3)
1) while ループ
2) do-while ループ
3) for ループ

[編集] ジャンプ文

ジャンプ文はフロー制御を無条件に転送します。

break ; (1)
continue ; (2)
return expression(オプション) ; (3)
goto identifier ; (4)
1) break
2) continue
3) return
4) goto

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 6.8 Statements and blocks (p: 146-154)
  • C99 standard (ISO/IEC 9899:1999):
  • 6.8 Statements and blocks (p: 131-139)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 3.6 STATEMENTS

[編集] 関連項目