名前空間
変種
操作

提供: cppreference.com
< c‎ | language

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

int main(void)
{ // start of a compound statement
    int n = 1; // declaration (not a statement)
    n = n+1; // expression statement
    printf("n = %d\n", n); // expression statement
    return 0; // return statement
} // end of compound statement, end of function body


文は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) // start of if-statement
{ // start of block
  int n = 1; // declaration
  printf("%d\n", n); // expression statement
} // end of block, end of if-statement

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

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

int main(void)
{ // start of block
  { // start of block
       puts("hello"); // expression statement
       int n = printf("abc\n"); // declaration, prints "abc", stores 4 in n
       int a[n*printf("1\n")]; // declaration, prints "1", allocates 8*sizeof(int)
       printf("%zu\n", sizeof(a)); // expression statement
  } // end of block, scope of n and a ends
  int n = 7; // n can be reused
}

[編集] 式文

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

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

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

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

puts("hello"); // expression statement
char *s;
while (*s++ != '\0')
    ; // null statement

[編集] 選択文

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

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

[編集] 関連項目