コメント

コンパイラが読み飛ばす行

コードの中には、コンピュータに向けた命令ではなく、読む人に向けたメモを書けます。これが コメント です。コメントの部分はコンパイル時に丸ごと取り除かれるので、実行ファイルには 1 文字も残りませんし、実行結果も変わりません。

書き方は 2 通りあります。

// 1行コメント。この行はここから右が全部メモになる /* 複数行コメント。 閉じるまでの何行でもメモになる */

// はスラッシュ 2 つで始まり、その行の終わりまでが自動でコメントです。/* は明示的に */ で閉じるまで続きます。短い補足には //、まとまった説明には /* */、という使い分けが一般的です。

行の途中から書ける

コメントはコードのうしろに付けることもできます。

printf("成績管理システム\n"); // 起動バナーの1行目

この // から右はメモなので、printf の動きには影響しません。前回学んだセミコロンより手前を消してしまわないよう、コメントは文の終わりのセミコロンより うしろ に置きます。

閉じ忘れという事故

/* で始めたのに */ を書き忘れると、そこから下のコードが全部コメント扱いになります。main の中身ごとメモになってしまい、何も表示されなくなったり、閉じカッコが足りないというエラーが出たりします。しかも原因の行と、エラーが報告される行が離れるので、初学者がいちばん時間を溶かすパターンのひとつです。

もうひとつの注意点として、/* */ は入れ子にできません。コメントの中にさらに /* を書いても、最初に見つかった */ で終わってしまいます。

何を書くか

慣れないうちは、1 行ずつ「何をしている行か」を日本語で添えると理解が進みます。ただし実務では、コードを読めば分かることをそのまま繰り返すコメントは嫌われます。

int total = 0; // total を 0 にする ← 読めば分かるので不要 int total = 0; // 合計点の初期値。まだ誰も採点していない状態 ← 意図が分かる

価値があるのは、なぜそうしたか後で困りそうな注意点 です。成績管理CLI を育てていく途中でも、判定の基準をどこから持ってきたか、といったことをコメントに残しておくと、数章あとの自分が助かります。

一時的にコードを止める使い方

コメントにはもうひとつ、実務でよく使う役目があります。動かしたくない行を一時的に無効にする、という使い方です。

printf("成績管理システム\n"); // printf("デバッグ用の表示\n");

2 行目はコメントなので実行されません。行を消してしまうと元に戻すのが面倒ですが、// を付けるだけなら、外せばすぐ復活します。原因の分からない不具合を調べるとき、行を 1 つずつ無効にして「どこまでは正しく動くか」を切り分ける、という調査によく使います。この作業をコメントアウトと呼びます。

ただし、無効にしたまま忘れて放置すると、読む人が「これは要るのか要らないのか」を判断できなくなります。調査が終わったら、戻すか、消すか、どちらかに決めてください。

ダブルクォートの中は別世界

注意したいのは、文字列の中に書いた // はコメントにならないことです。

printf("https://example.com\n");

これは URL がそのまま表示されます。第 1 回で学んだ「ダブルクォートの内側はただの文字の並び」という原則が、ここでも効いています。C の文法が働くのはクォートの外側だけです。

では、コメントを添えながらバージョン情報を出してみましょう。

要件

  1. 1行目に 成績管理システム v0.1 を表示する
  2. 2行目に 学生の点数を管理します を表示する
  3. // の1行コメントを1つ以上書く
  4. /* */ の複数行コメントを1つ以上書く

入出力例

main("") → "成績管理システム v0.1 学生の点数を管理します"

ヒント

生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部
main.c
学習モード

メモ

コメント

⌘S で保存