トラック4・🚪はじめてのC

コメントとコードの整え方

読む目安 約8分・ゴール:2種類のコメントを使い分け、読みやすい書き方の基本ルールを身につける

アプリでこのトピックを学ぶ(無料・登録不要)

このトピックの要点

コードは書く時間より読む時間のほうが長くなります。読む相手はたいてい3か月後の自分です。そのときの自分に向けて、少しだけ親切にしておく方法がコメントと整形です。

2種類のコメント

#include <stdio.h>

int main(void) {
    // 1行コメント。ここから行末までは無視される
    int tanka = 250;   // 行の途中からでも書ける

    /* 複数行のコメント。
       ここも全部が無視されます。
       長い説明はこちらが向いています。 */
    printf("単価 %d 円\n", tanka);
    return 0;
}

コメントはコンパイルの前に取り除かれるので、実行速度には一切影響しません。安心して書けます。

コメントに書くのは「なぜ」

    tanka = tanka * 110 / 100;   // 悪い例: 単価に110を掛けて100で割る
    tanka = tanka * 110 / 100;   // 良い例: 消費税10%を上乗せ(切り捨て)

コードを読めば「何をしているか」は分かります。分からないのは「なぜそうしたか」です。仕様の根拠、選んだ理由、あえて避けたこと。そこを書くとコメントの価値が跳ね上がります。

整え方の基本4つ

・インデント … { の中は半角スペース4つ(またはタブ)で1段下げる。これだけで構造が目で見えます。
・1行1文 … ; で区切って何文も並べない。
・空行でまとまりを作る … 入力・計算・出力のかたまりを空行で分けます。
・名前で語る … int a; より int tanka;。良い名前はコメント1行分の説明を省いてくれます。

#include <stdio.h>

int main(void) {
    // 入力
    int kosuu;
    printf("個数: ");
    scanf("%d", &kosuu);

    // 計算(単価250円・税10%)
    int zeinuki = 250 * kosuu;
    int zeikomi = zeinuki * 110 / 100;

    // 出力
    printf("税込 %d 円\n", zeikomi);
    return 0;
}

中身は難しくありませんが、3か月後の自分がすぐ読めます。

罠・注意

/* */ は入れ子にできない。 /* から最初の */ までがコメントです。コメントの中に別の /* */ があると、途中で終わってしまい、残りがコードとして解釈されて謎のエラーになります。広い範囲を一時的に消したいときは // を各行に付けるのが安全です。

コメントアウトの消し忘れ。 動かなくなったコードを // で隠したまま放置すると、後で「これは生きているのか」が分からなくなります。不要になったら消します。

コードとコメントの食い違い。 コードだけ直してコメントを直さないと、嘘の説明が残ります。嘘のコメントは、無いより有害です。

ビットコメントは未来の自分への手紙。「なぜ」だけ書けば、短くても効くよ。

まとめ

// は行末まで、/* */ は範囲指定。コメントはコンパイル時に消えるので速度に影響しません。書くべきは「何を」ではなく「なぜ」。インデント・1行1文・空行・良い名前の4つで、コードの読みやすさは十分に整います。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

コメントの説明として正しいものはどれですか。

  1. /* */ の中に、別の /* */ を入れ子にできる
  2. コメントは実行時に読み込まれるので、多いとプログラムが遅くなる
  3. // はその行の行末までがコメントになる
  4. コメントに書いた文章は実行結果として画面に表示される
答えを見る

正解:C(// はその行の行末までがコメントになる)

// は行末まで、/* */ は範囲を指定するコメントです。/* */ は入れ子にできず、最初に現れた */ で終わってしまうため、広い範囲を消すときは各行に // を付けるほうが安全です。コメントはコンパイルの前に取り除かれるので、実行速度には影響しませんし、画面にも出ません。

確認問題 2

このプログラムの出力はどれですか(/は改行を表します)。

#include <stdio.h>

int main(void) {
    printf("A\n");   // printf("B\n");
    /* printf("C\n");
    printf("D\n"); */
    printf("E\n");
    return 0;
}
  1. A/E
  2. A/B/E
  3. A/C/D/E
  4. A/B/C/D/E
答えを見る

正解:A(A/E)

4行目の // から行末まではコメントなので B は出ません。5〜6行目は /* から */ までがまとめてコメントなので、C も D も出ません。実行されるのは A と E の2つだけです。コメントアウトは、コードを消さずに一時的に無効化する定番の手段です。

「はじめてのC」の目次

  1. 開発環境ゼロで始める——このポータルの使い方
  2. Hello, World! を解剖する
  3. main関数と#include
  4. コンパイルエラーと友達になる
  5. printfで画面に出す——書式指定の基本
  6. scanfで入力を受け取る
  7. scanfの罠——入力の恐怖を越える
  8. コメントとコードの整え方

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版