Statements
Cプログラムの文(statements)は、順次実行されるプログラムの断片です。任意の関数の本体は複合文(compound statement)であり、これは文と宣言のシーケンスです:
int main(void) { // 複合文の開始 int n = 1; // 宣言(文ではない) n = n+1; // 式文 printf("n = %d\n", n); // 式文 return 0; // return文 } // 複合文の終了、関数本体の終了
ステートメントには5つの種類があります:
|
属性指定子シーケンス ( attr-spec-seq ) はラベルなし文に適用でき、その場合(式文を除く)属性はそれぞれの文に適用されます。 |
(C23以降) |
目次 |
ラベル
任意のステートメントは、 ラベル付け することができます。ステートメントの前に名前とコロンを付けることで実現します。
attr-spec-seq
(オプション)
(C23以降)
identifier
:
|
(1) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
case
constant-expression
:
|
(2) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
default
:
|
(3) | ||||||||
任意の文(ただし宣言を除く)の前に任意の数の ラベル を置くことができます。各ラベルは identifier をラベル名として宣言し、これは外側の関数内で一意でなければなりません(言い換えると、ラベル名は function scope を持ちます)。
ラベルの宣言は単独では効果がなく、制御フローを変更せず、後続の文の動作をいかなる方法でも変更しません。
|
ラベルは文が後に続かなければならない。 |
(C23まで) |
|
ラベルはそれに続く文なしで現れることができる。ラベルがブロック内で単独で現れる場合、 null文 が後に続くかのように振る舞う。 オプションの attr-spec-seq はラベルに適用される。 |
(C23以降) |
複合文
複合ステートメント、または block は、中括弧で囲まれた一連のステートメントと宣言です。
{
ステートメント
|
宣言
...
(オプション)
}
|
(C23まで) | ||||||||
属性指定子シーケンス
(オプション)
{
ラベルなしステートメント
|
ラベル
|
宣言
...
(オプション)
}
|
(C23以降) | ||||||||
複合文は、宣言と文の集合を1つの単位としてグループ化することを可能にし、単一文が期待される場所であればどこでも使用できます(例えば、 if 文や反復文内で):
if (expr) // if文の開始 { // ブロックの開始 int n = 1; // 宣言 printf("%d\n", n); // 式文 } // ブロックの終了、if文の終了
各複合文は独自の ブロックスコープ を導入します。
自動 記憶域期間 を持つ変数の初期化子と、ブロック内で宣言されたVLA宣言子は、制御フローがこれらの宣言を順番に通過する際に、それらが文であるかのように実行されます:
式文
式の後にセミコロンを付けると、それは文となります。
式
(オプション)
;
|
(1) | ||||||||
属性指定子並び
式
;
|
(2) | (C23以降) | |||||||
典型的なCプログラムのほとんどの文は、代入や関数呼び出しなどの式文です。
式を持たない式文は null statement と呼ばれます。これは for ループや while ループに空のボディを提供するためによく使用されます。また、複合文の終端や宣言の前にラベルを配置するためにも使用できます:
puts("hello"); // 式文 char *s; while (*s++ != '\0') ; // 空文
|
オプションの attr-spec-seq は式に適用されます。
attr-spec-seq
の後に
|
(C23以降) |
選択文
選択ステートメントは、式の値に応じて複数のステートメントの中から1つを選択します。
attr-spec-seq
(オプション)
(C23以降)
if
(
expression
)
statement
|
(1) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
if
(
expression
)
statement
else
statement
|
(2) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
switch
(
expression
)
statement
|
(3) | ||||||||
反復文
反復文は、文を繰り返し実行します。
attr-spec-seq
(オプション)
(C23以降)
while
(
expression
)
statement
|
(1) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
do
statement
while
(
expression
)
;
|
(2) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
for
(
init-clause
;
expression
(オプション)
;
expression
(オプション)
)
statement
|
(3) | ||||||||
ジャンプ文
ジャンプ文は無条件にフロー制御を移行します。
attr-spec-seq
(オプション)
(C23以降)
break
;
|
(1) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
continue
;
|
(2) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
return
expression
(オプション)
;
|
(3) | ||||||||
attr-spec-seq
(オプション)
(C23以降)
goto
identifier
;
|
(4) | ||||||||
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 6.8 文とブロック (p: TBD)
- C17規格 (ISO/IEC 9899:2018):
-
- 6.8 文とブロック (p: 106-112)
- C11規格 (ISO/IEC 9899:2011):
-
- 6.8 文とブロック (p: 146-154)
- C99規格 (ISO/IEC 9899:1999):
-
- 6.8 文とブロック (p: 131-139)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 3.6 文
関連項目
|
C++ documentation
for
Statements
|
|
C++ documentation
の
Statements
|