関数の { } 内に指定した、何らかの実行するべき動作のことを文(ステートメント)と呼びます。文は、複数の字句から構成され、特に指示がなければ順番に実行されます。Sample01を例にすると、main()関数内に記述している print()関数の呼び出しと return による戻り値を返す2つの文に分けることができます。文の種類によっても異なりますが、多くの文は末尾にセミコロン ; を指定するので、セミコロンでで文が分けられていると考えると理解しやすいでしょう。

文もまた、字句のように特性ごとに次のいずれかに種別できます。

  • 名前付き文
  • 複合文
  • 式文
  • 選択文
  • 繰り返し文
  • 分岐文

この中で、最も重要になるのは、計算式や関数の呼び出しなどを記述する式文でしょう。関数の中に書かれる多くは式文に該当します。return文は、関数を終了させる制御に関連する処理なので、分岐文に該当します。その他にも、分岐や繰り返しなど、コードの流れを制御する文などがあります。その他の文については、今後、少しずつご説明します。この場では、関数内に書く命令は文という単位で実行されるものだということを理解していただければ十分です。

コメント

コードの意味などを書き残すために、コード内に自由にテキストを記述できるコメント機能が用意されています。コメント内に記述したテキストは、コンパイル時に破棄されるため、文法上の制約は一切受けません。コードの意味を書き残す他に、デバッグのために一時的にコードの一部を無効化したい場合や、公開するソースコードに権利情報を書き残すといった目的でも使用されています。

コメントは /* から始まり */ で終わります。この間であれば、自由にメモを書くことができます。

/* 任意のコメント */

コメント内のテキストは、コードの流れに一切の影響を与えません。ただし、コメント自体にホワイトスペースと同様に字句を区切る性質があるので、字句の間にコメントを挿入することはできません。次のprintf()関数の呼び出しは不正です。

print/*output text*/f("きらめく言語でまた書ける。");

上記の文では、print と f の間にコメントがあるため、print と f に字句が区切られてしまいます。そのため、print という識別子が見つからないといったエラーや、識別子 f が不正であるといったエラーが報告されるでしょう。

Sample04

#include <stdio.h>

/*ゆっくりしていってね!!!*/
int/*字句を分断*/main(void) {
    printf("きらめく言語でまた書ける。\n");
    /*printf("goto 祭りがものすごいことに!\n");*/
    return 0;
}

実行結果

きらめく言語でまた書ける。

サンプル04の実行結果

Sample04は、コメントを使ってメモを残したり、一部のコードを無効化したりしています。main()関数の宣言で、 int と main の間に空白ではなくコメントが挿入されています。コメントは、コンパイル時に破棄されてしまうため、intmainという字句になってしまうのではないかと思うかもしれませんが、字句を区切る性質をもつため、正しくintとmainに区切られます。

最後に

今回は、C言語の基礎的な構造を理解するために、字句と文についてご説明しました。複雑なコードを見て、何が書いているか分からないときは、落ち着いて字句に分解してみましょう。その中で、知らないキーワードや記号などがあれば、その意味を調べることで理解できます。どんな複雑なプログラムも、中身は簡単な文の組み合わせなのです。