C言語編 第5章 コメントの書き方

この章の概要

この章の概要です。

コメントの書き方

ソースコードを読みやすくするために、大きな助けとなるのがコメントです。 コメントとは、ソースコードの中に記述するメモ書きのことで、日本語での記述も含めて、自由に書けるし、 プログラムの動作に一切影響を与えません。

ある程度大きなプログラムを書くようになると、どこでどんな処理をしているのか分かりにくくなってきます。 そんなとき、プログラム内にメモを残しておくと後から処理を見直したときに、処理内容を思い出す(理解する)助けになります。

C言語ではコメントを、/* と */という2つの記号で表現します。 この2つの記号で挟まれた部分がコメントになります。例えば、次の例では3か所にコメントがあります。

/* printf関数の実験 */

#include <stdio.h>

int main(void)
{
	double pi = 3.141592;
	
	printf( "%f\n", pi );	/* 3.141592 を出力 */
	printf( "%d\n", pi );	/* 3 ではなく変な値が出力される */

	return 0;
}

実行結果:

3.141592
-57999238

プログラムの先頭部分には、このプログラムが何をするものなのかを記述しておくことが一般的です。 他にも、作成者の名前や、実行に際しての注意書きなどを記述することもあります。

特に学校では、コメントをたくさん入れた方が良い、という風に教えることが多いようですが、基本的に「当たり前のことは書かない」ようにするべきです。 プログラムを解読しやすくすることが目的なのに、大量の説明文ばかりが目に付いたら、むしろ解読の妨げになりかねません。 例えば、先ほどの例に更にコメントを追加してみます。

/* printf関数の実験 */

#include <stdio.h>	/* stdio.h をインクルード */

/* main関数。ここから始まる */
int main(void)
{
	double pi = 3.141592;	/* 円周率を表す変数pi を double型で定義 */
	
	printf( "%f\n", pi );	/* 3.141592 を出力 */
	printf( "%d\n", pi );	/* 3 ではなく変な値が出力される */

	return 0;		/* main関数を終了 */
}

実行結果:

3.141592
-57999238

一見詳しくなったように見えますが、実際にはそれほど助けになるコメントは増えていません。 C言語の勉強を始めたばかりで、色々とメモを入れるという意味では、上のようなコメントの書き方も正当なものですが、 この程度のメモが不要になるぐらい、C言語を理解してきたら、こういうコメントはばっさりとカットしてしまって下さい。

余計なコメントが多いことの問題の1つには、実際のソースコードとコメントとの整合性を保つ労力が増大するという点があります。 ソースコードは後から何度も修正を繰り返す可能性があります。そのとき、その修正に追従してコメントを書き変えないと、 コメントが嘘を付いていることになる場合があります。
コメントは、プログラムを解読するための助けであって、たくさん書いて自己満足するためのものではありません。 コメントが嘘を付いていたら最悪です。

コメントの内部に、更にコメントを書くような構造は許されません。 要するに、

#include <stdio.h>

int main(void)
{
	/*
		コメント1
		/*
			コメント2
		*/
		コメント3
	*/

	return 0;
}

このように書いても、コメントとして扱われるのは、「コメント1」「コメント2」の部分だけです。 「コメント3」の部分は、コメントでは無いと扱われるため、コンパイルエラーになってしまいます。

コメント部分は、プログラムの実行には無関係であり無視されますが、より正確には、コメントは半角空白1文字に変換されます。 例えば「 ret/*ここは無視*/urn 」のような記述は、「 ret urn 」に変換されるため、return として扱われることはありません。

コメントになった部分は、プログラムの実行に影響を与えないので、一時的に処理の一部を無効化する目的に使うこともあります。 このように、処理の一部を無効化するために行うコメントの記述を、コメントアウトと呼びます。

/* printf関数の実験 */

#include <stdio.h>

int main(void)
{
	double pi = 3.141592;
	
	printf( "%f\n", pi );	/* 3.141592 を出力 */
/*	printf( "%d\n", pi );	/* 3 ではなく変な値が出力される */

	return 0;
}

実行結果:

3.141592

2つ目の方の printf関数の呼び出しをコメントアウトしたので、この部分は実行されなくなりました。 いらなくなった処理を無効化する際、本当にソースコードの一部分を削除してしまうと、当然ながら、元に戻すことができなくなります。 コメントアウトであれば、一応、コメントとして残っているので、後から簡単に復元できます。 ただ、コメントアウトされたコードばかりが大量に残っていると、見通しが悪くなります。 復元の可能性がほとんど無くなった段階で、綺麗に削除してしまった方が良いかも知れません。

C99 (//形式のコメント)

C99 からは、コメントを // という記号で記述できるようになりました。 // 形式のコメントは、「//」からその行の行末までをコメント化します。 複数行をまとめてコメントにすることができませんが、いちいち終端の記号を書かなくて良くなります。 大抵のコメントは、1行で完結するので、入力の手間が減らせます。

#include <stdio.h>

int main(void)
{
	// コメント
	
	return 0;
}

VisualC++ 2013/2015/2017、clang 3.7 は、いずれもこの形式のコメントが使えます。


練習問題

問題@ main関数をコメントアウトするとどうなるでしょう。

問題A 次のプログラムをコンパイルするとエラーになるでしょうか?(まず考えてから、試して下さい)

int main()
{
	/*
	int num = 100;
		/*
		*/
	/*/
	printf( "%d\n", num );
	*/
	return 0;
}


解答ページはこちら

参考リンク

更新履歴

'2017/3/25 VisualC++ 2017 に対応。

'2016/10/15 clang の対応バージョンを 3.7 に更新。

'2015/10/12 clang の対応バージョンを 3.4 に更新。

'2015/9/5 VisualC++ 2012 の対応終了。

'2015/8/18 VisualC++ 2010 の対応終了。

'2015/8/15 VisualC++ 2015 に対応。

'2014/10/18 clang 3.2 に対応。

'2014/2/1 VisualC++ 2013 に対応。

'2014/1/14 VisualC++ 2008 の対応終了。

'2014/1/10 clang 3.0 に対応。
//コメントの例の中で、C++ の標準ヘッダが include されていたのを修正。

'2013/4/14 //コメントについて、C99 の機能としてまとめた。

'2009/3/19 文章一部修正。追記。

'2009/3/7 「この章の概要」を追加。

'2008/11/9 新規作成。



前の章へ

次の章へ

C言語編のトップページへ

Programming Place Plus のトップページへ