コメント
コンパイラが読み飛ばす行
コードの中には、コンピュータに向けた命令ではなく、読む人に向けたメモを書けます。これが コメント です。コメントの部分はコンパイル時に丸ごと取り除かれるので、実行ファイルには 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行目に 成績管理システム v0.1 を表示する
- 2行目に 学生の点数を管理します を表示する
- // の1行コメントを1つ以上書く
- /* */ の複数行コメントを1つ以上書く
入出力例
main("") → "成績管理システム v0.1
学生の点数を管理します"