閉じる

【C言語】コメントの書き方についてわかりやすく解説

C言語では、コメントはプログラムの動作には影響しないメモや説明として重要な役割を持ちます。

特に初心者のうちは、コメントを上手に使うことでコードの理解が深まり、後から読み返したときにもスムーズに内容を思い出せます。

ただし、コメントの書き方を間違えるとコンパイルエラーになったり、かえって読みづらくなったりします。

ここでは、C言語におけるコメントの基本から、実務でも通用する書き方のコツまで、丁寧に解説します。

C言語のコメントとは

コメントの役割

C言語におけるコメントは、コンパイラに無視される人間のための説明文です。

プログラムの動作には一切影響しませんが、次のような役割を持ちます。

1つ目は、コードの意図や背景を説明する役割です。

なぜこのアルゴリズムを選んだのか、なぜこの定数の値なのかなど、コードだけでは伝わりにくい「考え方」を補足します。

2つ目は、自分や他人が後から読みやすくする役割です。

プログラムは書いているときは理解できますが、数週間後、数か月後に見返すと細かい意図を忘れていることがよくあります。

そのときにコメントがあると、短時間で理解し直すことができます。

3つ目は、未完成の部分や注意点を示す役割です。

例えば「ここはあとで最適化する」「この関数は暫定的な実装」といったメモを残すことで、開発の抜け漏れを防ぎます。

表に役割をまとめます。

役割説明
意図や背景の説明どうしてその書き方にしたのか、設計上の理由を補足するためのコメント
読みやすさの向上自分や他人がコードを素早く理解できるようにするためのコメント
注意点・未完成部分の共有制約、バグの可能性、今後の対応予定などを明示するためのコメント

コメントは「なくても動く」けれど「あると品質が上がる」要素だと理解しておくとよいです。

C言語のコメントの種類

C言語のコメントには、主に次の2種類があります。

  • 行コメント(// ...)
  • ブロックコメント(/* ... */)

それぞれの特徴を簡単に整理しておきます。

種類書き方範囲主な用途
行コメント// コメント行末まで短い説明、行末の補足
ブロックコメント/* コメント */*/まで複数行可まとまった説明、ヘッダコメント

C99以降のC言語では//形式の行コメントが使えます。

古いコンパイラやC89では//が使えないこともありますが、現在よく使われる環境ではほぼ問題ありません。

コメントの基本的な書き方

行コメント(//)の書き方と使いどころ

行コメントは、その行の途中から行末までをコメントとして扱う書き方です。

基本的な書き方

以下のように//から行末までがコメントになります。

C言語
#include <stdio.h>

int main(void) {
    int x = 10;  // xに10を代入する

    // xの値を表示する
    printf("x = %d\n", x);

    return 0;   // 正常終了
}

上記のコードでは、// xに10を代入する の部分から行末までがコメントです。

コンパイラはこの部分を読み飛ばします。

行コメントは、1行で完結する短い説明に向いています。

また、行末に補足説明を書くときにもよく使われます。

行コメントの主な使いどころ

行コメントには次のような使い方があります。

1つ目は、1行だけの処理に対する簡単な説明です。

処理の意図を補足したい場合に便利です。

C言語
int count = 0;   // 要素数を数えるためのカウンタ

2つ目は、一時的にコードを無効化(コメントアウト)するときです。

例えば、デバッグのために特定の行だけ動かしたくない場合に使います。

C言語
// printf("デバッグ用: x = %d\n", x);

3つ目は、構造をそろえて並べて書きたいときです。

定数定義にコメントを添えるときなどに便利です。

C言語
#define STATUS_OK      0  // 正常
#define STATUS_ERROR   1  // エラー
#define STATUS_RETRY   2  // 再試行

このように行コメントは、手軽で読みやすく、頻繁に使われるコメント形式です。

ブロックコメント(/* */)の書き方と使いどころ

ブロックコメントは、複数行をまとめてコメントにできる書き方です。

基本的な書き方

/で始まり/で終わるまでが、すべてコメントとして扱われます。

C言語
#include <stdio.h>

/*
 * このプログラムは、2つの整数の合計を計算して表示します。
 * 将来的には、入力値をユーザから受け取るように拡張する予定です。
 */
int main(void) {
    int a = 3;
    int b = 5;

    int sum = a + b;  /* aとbの合計を計算する */

    printf("sum = %d\n", sum);

    return 0;
}

この例では、冒頭の複数行コメントと、行の途中の/* aとbの合計を計算する */がブロックコメントです。

ブロックコメントは、関数の説明やファイル全体の説明など、少し長めの情報を書くときに向いています。

ブロックコメントの主な使いどころ

ブロックコメントには次のような場面で使います。

1つ目は、関数の説明(仕様や使い方)を書くときです。

C言語
/*
 * calc_average
 * 引数で与えられた合計値と要素数から平均値を計算して返します。
 * countが0の場合は0.0を返します。
 */
double calc_average(int sum, int count) {
    if (count == 0) {
        return 0.0;  // 0除算を避けるための特別な処理
    }
    return (double)sum / count;
}

2つ目は、ファイルの先頭に概要を書く場合です。

どんな目的のプログラムか、作成者、作成日、注意点などを記載できます。

C言語
/*
 * file: main.c
 * 概要: 簡単な計算機プログラムのエントリポイント
 * 注意: 入力値の検証は最小限の実装
 */

3つ目は、複数行のコードをまとめてコメントアウトしたいときです。

これは後述の「コメントアウトとコード削除の使い分け」にも関係します。

C言語
/*
printf("ここは一時的に無効化したい処理です\n");
x = x + 10;
y = y - 5;
*/

このようにブロックコメントは、まとまった情報や複数行にわたる説明に適した形式です。

コメントを書く位置

コメントは、どこに書くかによって読みやすさが変わります。

一般的には次のようなパターンがあります。

  • 行の右側(同じ行の末尾)に書く
  • 行の直前に書く
  • 関数やファイルの先頭にまとめて書く

行の右側に書くパターン

短い補足や、その行だけを説明したいときに使います。

C言語
int width = 1920;   // 画面の幅(ピクセル)
int height = 1080;  // 画面の高さ(ピクセル)

このように並べて書くと、値と意味の対応が一目でわかります。

行の直前に書くパターン

複数行にまたがる処理や、少し説明が必要なときに向いています。

C言語
// 配列の要素をすべて0で初期化する
for (int i = 0; i < size; i++) {
    array[i] = 0;
}

処理のまとまりの「見出し」のようなイメージで書くと読みやすくなります。

関数やファイルの先頭に書くパターン

プログラムの概要や関数の仕様を説明するのに使います。

これはブロックコメントで書くことが多いです。

C言語
/*
 * init_config
 * 設定値を初期化します。
 * 返り値: 成功時は0、失敗時は負の値
 */
int init_config(void) {
    ...
}

コメントは「自分が後から読んで意味がすぐに思い出せる場所」に置くことが大切です。

処理のまとまりごとに、手が止まらない程度の量を意識しましょう。

読みやすいコメントを書くコツ

「何をしたか」ではなく「なぜそうするか」を書く

初心者のうちは、つい「コードの内容そのもの」を説明してしまうコメントを書きがちです。

例えば次のようなコメントです。

C言語
i = i + 1;  // iに1を足す

これはコードを見れば一目で分かるため、ほとんど意味がありません。

このようなコメントは、コードを読む人にとってノイズになります。

良いコメントは、コードを見ても分からない「理由」や「背景」を説明します

C言語
// ここで+1するのは、インデックスが0始まりであるため
i = i + 1;

または、条件分岐でも「なぜその条件なのか」を書くと理解しやすくなります。

C言語
// 3回連続で失敗したら処理を中断する仕様
if (retry_count >= 3) {
    break;
}

「何をしているか」はコード、「なぜそうしているか」はコメントと役割分担をすると、コメントが有効に機能します。

変数名や関数名とコメントのバランスを取る

コメントを書く前に、変数名や関数名を分かりやすくすることも大切です。

名前が十分に説明的であれば、コメントは最小限で済みます。

悪い例

C言語
int a;  // 名前
int b;  // 年齢

void f(void);  // ユーザ情報を表示する

変数名abだけでは意味が分からず、コメントがないと何を表しているのか判断できません。

良い例

C言語
int user_name_length;  // ユーザ名の文字数
int user_age;          // ユーザの年齢

void print_user_info(void);  // ユーザ情報を表示する

変数名や関数名自体を分かりやすくすることで、コメントは「補足」に集中できます。

コメントで説明しなくても分かる名前をつけるよう心がけると、結果としてコード全体が読みやすくなります。

日本語コメントと英語コメントの使い分け

C言語では、ソースコードに日本語コメントを書くこともできます。

ただし、環境によっては文字コードの問題が起きる場合もあり、チームやプロジェクトの方針で「英語のみ」と決まっていることもあります。

初心者が個人で学習する場合は、日本語コメントで構いません

むしろ、自分が理解しやすい言語で詳細に書く方が、学習効果が高いです。

一方で、以下のような場面では英語コメントが選ばれやすいです。

  • オープンソースプロジェクト
  • 海外のエンジニアと共同開発する場合
  • 会社として英語を標準にしている場合

例えば、次のようなコメントは英語でも簡単に書けます。

C言語
// TODO: handle error case
// NOTE: this function is not thread-safe

このようなキーワードTODONOTEは、英語コメントの定番です。

まとめると、学習中や個人プロジェクトでは日本語、チーム開発ではルールに従うのが良い方針です。

チーム開発を意識したコメントの書き方

チームで開発する場合、コメントは自分だけでなく他の人も読むものになります。

そのため、次の点を意識すると良いです。

1つ目は、主観的な表現を避けることです。

NG例:

C言語
// とりあえずこれで動くはず

OK例:

C言語
// 仮実装: 入力チェックは未実装のため、異常値の場合の動作は未定義

2つ目は、将来の読者を意識することです。

「今の自分」だけでなく「半年後の自分」や「別の開発者」が読んでも分かるように書きます。

3つ目は、プロジェクトで決められたスタイルに合わせることです。

インデント、コメントの位置、言語(日本語か英語か)など、チームのルールに統一することで、読みやすさが大きく向上します。

初心者がやりがちなNGコメントと注意点

コメントの書きすぎ・コードと矛盾するコメント

コメントの書きすぎは、初心者がよく陥るパターンです。

何でもかんでも説明しようとしてコードよりコメントの方が長くなると、逆に読みづらくなります。

書きすぎの例

C言語
int i = 0;  // iという変数を0で初期化している。この変数はfor文でループ回数を数えるために使う
for (i = 0; i < 10; i++) {  // iが0から9まで1ずつ増加しながらループする
    printf("%d\n", i);  // iの値を画面に出力している
}

ここまで細かく説明する必要はありません。

コードを読めば分かる内容は、あえてコメントにする必要はないのです。

また、コードを修正したのにコメントを直し忘れると、コードとコメントの矛盾が起こります。

これは非常に危険で、バグの原因になります。

矛盾したコメントの例

C言語
int max_retry = 3;  // 最大5回リトライする

変数名や値から見ると「3回」なのに、コメントには「5回」と書かれています。

この場合、どちらが正しいのか判断できず、他の開発者を混乱させます。

コメントは「少なすぎても困る」が「多すぎたり古くなっても危険」です。

重要な意図や設計の背景に絞って書き、コード変更に合わせて更新するようにしましょう。

/* */ の閉じ忘れによるコンパイルエラー

ブロックコメント/* ... */閉じ忘れは、初心者が非常に多く経験するトラブルです。

閉じ忘れの例

C言語
#include <stdio.h>

int main(void) {
    /* ここからコメントを開始

    printf("Hello\n");

    return 0;
}

このコードは*/がないため、ファイルの最後までコメント扱いになってしまい、コンパイルエラーになります。

コンパイラからは、次のようなエラーが出ることがあります。

実行結果
error: unterminated comment

この問題を防ぐためには、先に/* */のペアを入力してから中身を書く癖をつけると良いです。

C言語
/* ここにコメントを書く */

また、最近のエディタやIDEでは、ペアになる*/を自動で補完してくれる機能もあります。

そのような機能を活用するのも良い方法です。

コメントアウトとコード削除の使い分け

「コメントアウト」とは、本来実行されるコードをコメントにして一時的に無効化することです。

コメントアウトの例

C言語
// printf("この行は今は実行しない\n");

または複数行をまとめて無効化する場合。

C言語
/*
printf("デバッグ1\n");
printf("デバッグ2\n");
*/

コメントアウトは、次のような目的で使います。

  • デバッグのために一部の処理だけ無効にする
  • 比較のために、古いコードを一時的に残しておく

しかし、いつまでも古いコードをコメントアウトしたまま残しておくのは良くありません

ファイルがどんどん読みづらくなり、どれが本当に必要なコードなのか分かりにくくなります。

「もう使わない」と判断したコードは、思い切って削除する方がよいです。

バージョン管理システム(Gitなど)を使っていれば、過去の状態はいつでも参照できるので、コメントアウトで残しておく必要はありません。

初心者のうちは不安かもしれませんが、コメントアウトはあくまで「一時的な措置」だと意識しておきましょう。

TODOコメントやメモ書きを放置しないコツ

開発中によく使われるコメントに、TODOFIXMEなどのメモ的なコメントがあります。

C言語
// TODO: エラー処理を実装する
// FIXME: バッファサイズが足りない場合にクラッシュする可能性あり

これ自体は有用ですが、書きっぱなしで放置すると、次の問題が起こります。

  • 完了したかどうかが分からなくなる
  • 重要な問題が埋もれてしまう
  • コードの品質がいつまでも上がらない

放置しないためのコツとしては、次のような工夫があります。

1つ目は、TODOを必ず検索で拾える形式にすることです。

TODO:のように大文字で統一して書けば、エディタの検索機能で一覧できます。

2つ目は、期限や担当者を一緒に書くことです。

C言語
// TODO(2025-12-01, yamada): 入力値の範囲チェックを追加する

3つ目は、定期的にTODOコメントを見直す時間を取ることです。

小規模な個人開発でも、1週間に1回くらい「TODOの棚卸し」をすると、放置が減ります。

TODOコメントは「必ず後で対応するタスク」だと意識し、書いたら忘れない仕組みを作ることが重要です。

サンプルコードでコメントの書き方を確認

ここまでの内容を踏まえた、簡単なサンプルコードを示します。

良いコメントの例として参考にしてください。

C言語
#include <stdio.h>

/*
 * calc_average
 * 配列に格納された整数の平均値を計算して返します。
 * params:
 *   values: 整数配列
 *   size  : 配列の要素数
 * return:
 *   平均値(double)
 * 注意:
 *   sizeが0の場合は0.0を返します。
 */
double calc_average(const int values[], int size) {
    if (size == 0) {
        // 要素数が0の場合、0除算を避けるために0.0を返す
        return 0.0;
    }

    int sum = 0;  // 合計値を保持する変数
    for (int i = 0; i < size; i++) {
        sum += values[i];
    }

    // 平均値をdouble型で計算するためにキャストする
    return (double)sum / size;
}

int main(void) {
    // サンプルデータ(テスト用)
    int data[] = { 10, 20, 30, 40, 50 };
    int size = 5;  // 要素数

    // 平均値を計算する
    double avg = calc_average(data, size);

    // 結果を表示する
    printf("average = %.2f\n", avg);

    return 0;  // 正常終了
}

上記プログラムの実行結果は次のようになります。

実行結果
average = 30.00

このサンプルでは、次の点を意識しています。

  • 関数の仕様をブロックコメントで説明
  • 行コメントでは「なぜそうするか」を説明
  • 変数名や関数名は意味が分かりやすい名前にする
  • データの用途(テスト用かどうか)をコメントで明示

このようなスタイルを少しずつ真似していくと、自然と読みやすいコメントを書けるようになります。

まとめ

本記事では、C言語のコメントの基本から、実際に役立つ書き方のコツ、初心者が陥りやすい失敗までを解説しました。

行コメント(//)とブロックコメント(/* */)の違いを理解し、それぞれに合った使い方をすることが第一歩です。

そのうえで、「何をしたか」ではなく「なぜそうするか」を書くことを意識すると、コメントの価値がぐっと高まります。

また、変数名や関数名を工夫してコメントとのバランスを取ること日本語と英語の使い分けチームルールに合わせることも、実務や複数人での開発では重要になります。

最後に、コメントの書きすぎ、古くなったコメント、/* */の閉じ忘れ、放置されたTODOなどは、どれもコードの品質を下げる要因です。

コメントは「書けば終わり」ではなく、コードと一緒に育てていくものだと考えてください。

C言語初心者のうちは、まずは自分が後から読み返して理解できるレベルのコメントを丁寧に書くことから始めましょう。

慣れてきたら、ここで紹介したポイントを少しずつ取り入れ、読みやすく、保守しやすいコメントを目指してください。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!