第2章08 プログラムにコメントを書く@イチからゲーム作りで覚えるC言語

C言語でコメント

C言語でコメント

イチからゲーム作りで覚えるC言語
連載ページ一覧へ
2章09 ユーザからの入力を受け付ける
NEXT : 2章09 ユーザからの入力を受け付ける
2章07 変数に配列を使う : PREV

この記事でやること

前回はプロジェクト「0055_array」を新しく作り、配列を使うプログラムを作成しました。
今回は、新しくプロジェクト「0060_comment」を作り、コメントの使い方をお話します。コメントとはソースコードに書くメモ書きのようなもので、プログラムとしてはなにも実行されず、無視されます

コメントは変数の用途やプログラムの処理内容などについて、人間がよめる言葉で補足説明するときなどに書いておくと、他の人が見た時や、将来の自分がソースコードを見直すときにヒントとなり助かるときがあるでしょう。

この記事はゆる~くC言語でコンソールゲームを作りながらプログラミングを学ぶための連載記事です。シリーズものですので記事の一覧はこちらを参照してくださいね。

コメントを書き込んだプログラム

ではでは 文字列を取り扱うサンプルプログラムを作成してみましょう。
プロジェクト「0060_comment」を新しく用意し、プロジェクトに空の「Comment.c」を追加し、下のソースコードをコピペして動かしてみましょう。
※ソースコードでコメント部分の行は背景色を変えています。

#include <stdio.h>

/*
 * プログラムのエントリポイント
 */
int main() {
 /* === 変数の宣言と初期化 === */
 // プレイヤーの名前
 char* player = "ぷらんく";
 // レベル
 short level = 5;

 /* === プレイヤーのステータスを表示 === */ 
 printf("+------[ステータス]------+\n");
 printf("|%10s : %-11s|\n", "名前", player);
 printf("|%10s : %03d%8s|\n", "レベル", level,"");
 printf("+------------------------+\n");
}

コピペなりして、実行してみて下さい。

+------[ステータス]------+
|      名前 : ぷらんく   |
|    レベル : 005        |
+------------------------+

こんな結果になります。
コメント部分の行は特になにも処理はされず、無視されているのがわかると思います。
コメントの書き方は大きく2種類あります。

コメントの書き方

C言語で昔からあるコメントの書き方

ソースコードで/*」からはじまり「*/」までの部分がコメントになり、プログラムが実行されるときには無視されます。このコメントの書き方だと、複数行にわたってコメントにできます。書き方はこんな感じ。今回の3行目~5行目です。

/*
 * プログラムのエントリポイント
 */

3行目で「/*」があり、コメントが開始され、5行目に「*/」でコメントが終了します。その間は説明文等を入れることができます。4行目の頭にも「*」がありますが、これはただの見た目の飾りで、特に意味はありません。
関数の前だったり、ソースコードの冒頭に著作権表記やライセンス、バージョン、作者への連絡先なんかが入っていることが多いです。

後からC言語に追加されたコメントの書き方

ソースコードで「//」の記載がある行について、「//」記号から行末までがコメントという扱いとなります。今回のプログラムソースコードでは8行目や10行目がこのコメントの書き方になります。

 // プレイヤーの名前

この書き方は C99 (1999年のC言語のISO規格)から有効となったコメントの書き方です。
Visual Studio 上でC言語を書くときももちろん使えますし、最近のコンパイラであればVisual Studio 以外でも「//」のコメントの書き方でもまったく問題ないはずです。

コメントを利用した処理の確認

C言語に限った話ではありませんが、特定のソースコードの行を一時的にコメントにして、実行されないようにすることができます。
コメントアウトと呼ばれ、あるプログラムを実験で実行する時や、コードの誤り(バグ)を取り除くときにも一つのテクニックとして使用されることがあります。

 // short level = 5;
 short level = 99;
 printf("レベルは %d です。", level );

例えば、ちょっとプレイヤのレベルを 99 に上げて様子をみたいときなどに、上のコードのように、元々あったコードをコメントアウトし、かわりに level = 99 を追加して実験としてプログラムを動かすことができます。
元の level = 5 に戻すときは、 level = 99 の行をコメントアウト(行の頭に // を書く)し、元々の level = 5 のほうのコメント「//」を消すだけで簡単です。

/* ~ コメント ~ */ は本来プログラムの補足説明を書くべきであり、プログラムを実行させない目的ではありませんが、実態としてよく使用されているのでお話しておきます。
ある行の処理を実行させないということを行うのであれば、本来、後のページで出てくる 「#if 0」~「#endif」のプリプロセッサ命令の間に書くなどがより良いのかもしれません。

複数行のコメントアウト

複数行を「//」でコメントアウトしようとすると、その行のすべての頭に「//」を書かないといけないため、ちょっと面倒ですね。そうした場合に「/* ~ コメント ~ */」で囲むとよいのですが、注意しなければならないのは、「/* ~ コメント ~ */」は二重で囲むことができないということです。

古くからあるC言語のソースコードなどでは、「// コメント」ではなく「/* ~コメント ~ */」となっているかとおもいます。そんなコメントを含む複数行をコメントアウトしたい場合もあるかともいます。

たとえば、今回のプログラムで、printfで変数の中身を表示する部分をコメントアウトしたいと考えた時、こんな書き方はできないので気を付けてください。(12行目 と 18 行目にコメントが追加されています)

 #include <stdio.h>

/*
 * プログラムのエントリポイント
 */
int main() {
 /* === 変数の宣言と初期化 === */
 // プレイヤーの名前
 char* player = "ぷらんく";
 // レベル
 short level = 5;
 /* 以下はステータスの表示例
 /* === プレイヤーのステータスを表示 === */ 
 printf("+------[ステータス]------+\n");
 printf("|%10s : %-11s|\n", "名前", player);
 printf("|%10s : %03d%8s|\n", "レベル", level,"");
 printf("+------------------------+\n");
 */
}

「/* ~ コメント ~ */」が二重になってしまっています。これは正しくコンパイラが処理できず、ビルドが失敗します。

このシリーズでのコメントの書き方

このC言語でゲーム作成のシリーズ内では、基本的にコメントは「//」のほうを使って書いていこうと思います。必要に応じて、変数や処理の概要をわかりづらいソースコードの箇所に追加していきます。

Visual Studio の機能を使って複数行をコメントアウトする

複数行を一気にコメント化する便利なショートカットが Visual Studio にあります。
わりと使うので、覚えておくと便利です。

Visual Studio のコメントアウト ショートカット
ショートカット 意味と使い方
Ctrl+k

Ctrl+c
エディタで選択している行の頭に「//」を加えてコメントアウトします。キーの [c] は Comment の頭文字、で覚えておくとよさそうです。
Ctrl+k

Ctrl+u
エディタで選択している行の頭に「//」があれば削除します。キーの [u] は UnComment の頭文字、で覚えてます。

コメントと Visual Studio の IntelliSense との連携

コメントを変数や関数の前に書くことで、Visual Studio のドキュメントディタで変数をしようとしたとき、日本語で漢字変換するときのように自分でつけたコメントの内容を、エディタのカーソル場所にポップアップしてくれます
これは Visual Studio のエディタが持つ、ソースコードを書くときに仕える補助機能で、「IntelliSense」(インテリセンス)と呼ばれています。

今回、変数「player」に「プレイヤーの名前」というコメントを付けましたが、その変数を使おうとするときに、似たような変数の名前一覧や、変数につけたコメントの内容が表示されるようになります。
例えば player という変数を使おうとして、「play」まで書いたときの画面はこんな感じになります。play の下あたりに、似たような変数などの一覧がVariable or Const Icon on IntelliSense dialogのアイコンで表示されていて、「player」も候補にあがってます。その右側に、「変数の宣言」や「コメントの中身」、「どのソースコード(ファイル)で書いたのか」が表示されています。とっても便利です。

IntelliSense で変数のコメントを表示

IntelliSense で変数のコメントを表示

似たような名前や機能を持つ変数、関数が増えたりすると、こういったコメント付けをしておくことで開発効率があがりますし、変数、関数の使い間違えを減らすことができるので、プログラムの品質を上げることができます。

コメントの由来

2つのスタイルのコメントがC言語では使えますが、もともと「/* コメント */」はPL/I というプログラミング言語「// コメント」は BCPL というプログラミング言語が元になっているようで、当初はC言語は「/* コメント */」のみ導入されていました。

C++言語で「// コメント」と「/* コメント */」の両方が扱えるように対応され、利便性からC言語側でも使えるように導入された、という流れの用です。

C++言語はC言語の機能拡張版なんていう話も聞きますが、相互に影響を与えあって発展しあっているというのが正しいことのようです。

あとがき

Intelli Sense についてはまた別のページで便利な使い方や書き方をまとめてみたいと思います。
今回はここまで。お疲れさまでした。

イチからゲーム作りで覚えるC言語
連載ページ一覧へ
2章09 ユーザからの入力を受け付ける
NEXT : 2章09 ユーザからの入力を受け付ける
2章07 変数に配列を使う : PREV

非常に参考になったサイトさまや、参考文献など

ページの更新履歴

更新日 更新内容
更新なし