制御文

次の制御文 (control statement) とラベル (label) を使用できます。

条件分岐

if <条件式 1>
  <文またはブロック 1>
else if <条件式 2>
  <文またはブロック 2>
else if <条件式 3>
  <文またはブロック 3>
...
else
  <文またはブロック Z>

<条件式 1> が真であれば、<文またはブロック 1> が実行されます。

<条件式 1> が偽で <条件式 2> が真であれば、<文またはブロック 2> が実行されます。<条件式 1><条件式 2> も偽で <条件式 3> が真であれば、<文またはブロック 3> が実行されます。このように else if 節はいくつでも続けられます。

最後に、if 節とすべての else if 節が偽であれば、<文またはブロック Z> が実行されます。

それぞれの <条件式> には整数式を指定します。この整数式が 0 以外に評価されれば真、0 に評価されれば偽と見なされます。

switch (<判定式>) {
 
case <値 1>:
    <文またはブロック 1>...
    [break;]
  case <値 2>:
    <文またはブロック 2>...
    [break;]
  ...
 
default:
    <文またはブロック Z>...
}

<判定式>には int 型の式を指定します。その式の値が <値 1>と等しければ、制御は <文またはブロック 1>の先頭に移動します。式の値が <値 2>と等しければ、制御は <文またはブロック 2>の先頭に移動します。同様の case ラベルをいくつでも記述できます。case に指定する <値>が重複してはなりません。

<判定式>の値がどの case 値にも一致しない場合、制御は default ラベルがあればそこに移動し、default ラベルがなければ最後の}の次に移動します。

break があると、制御は最後の}の次に移動します。

ループ

for (<初期化式>; <条件式>; <更新式>)
  <文またはブロック>

  1. 最初に <初期化式> が実行されます。
  2. 次に <条件式> が評価され、偽であれば for ループは終了して制御が <文またはブロック> の次に移動します。
  3. <文またはブロック> が実行されます。
  4. 最後に <更新式> が実行され、制御は手順2 に戻ります。

<文またはブロック> の途中に break または continue 文 (後述) を含めることもできます。

<初期化式><条件式><更新式> は、いずれも省略可能です。<文またはブロック> は空文 (「;」だけの記述) でもかまいません。
// 0 〜 9 を表示する
int i;
for ( i = 0; i < 10; i++ )
  printf( "i=%d\n", i );

Light C では、<初期化式> で変数を宣言することもできます。
// 上のコード例と同じ
for ( int i = 0; i < 10; i++ )
  printf( "i=%d\n", i );

メモ   ただし C99 仕様とは異なり、<初期化式> で宣言された変数のスコープは、for 文内にとどまらず、同一関数内の以降の部分すべてに渡ります (過去の C++ の仕様と同じ)。

while (<条件式>)
  <文またはブロック>

  1. 最初に <条件式> が評価され、偽であれば while ループは終了して制御が <文またはブロック> の次に移動します。
  2. 次に <文またはブロック> が実行されます。
  3. 制御が手順1 に戻ります。

<文またはブロック> の途中に break または continue 文 (後述) を含めることもできます。

<条件式> は省略できません。常に真にしたい場合は定数の 1 などを指定します。<文またはブロック> は空文 (「;」だけの記述) でもかまいません。

do
  <文またはブロック>
while (<条件式>);

  1. 最初に <文またはブロック> が実行されます。
  2. 次に <条件式> が評価され、偽であれば do ループは終了して制御が <文またはブロック> の次に移動します。
  3. 制御が手順1 に戻ります。

その他

break

forwhiledoswitch<文またはブロック> の中に記述します。break 文は、制御を forwhiledoswitch の次の文に移動します。

continue

forwhiledo<文またはブロック> の中に記述します。continue 文は、制御をループの先頭に戻します。for の場合、<更新式> は実行されません。

goto <ラベル名>;

下の構文で定義したラベルに制御を移動します。

<ラベル名>:

goto 文のジャンプ先として使用するラベルを定義します。

Light C では、ラベルは変数と同じように { } によるスコープの影響を受けます。