第40回
プログラミングの周辺事項(3)~適切なコメントとは?

コメント記号と複数行のコメント

コメントの記号は言語によってさまざまです。Cでは複数行にわたるコメントを書けますが、多くの言語では1行コメントが採用されています。長いコメントをダラダラと書けることに、メリットはあるのでしょうか?

/* */ と //

Cのコメントは、 /* と */ の間に記述します。その間に改行が入っても構わないので、複数行にわたる長いコメントをまとめて記述できます。

また、C++コンパイラではCのソースもコンパイルでき、その場合にはC++のコメント記号である // も使えます。//記号は、そこから改行までをコメントと見なします。

中には、複数行の長いコメントなら/* */、1行の短いコメントなら//……と、使い分けている人もいるようです。が、できればコメント記号は『1言語につき1つ』に決めておいた方がいいでしょう。いろいろな言語を扱っていると、コメント記号を見て使われている言語を判断できるようになります。つまり、『コメント記号がその言語を表す』ということです。

通常、ソースファイルの先頭にはそのソースが何を行っているのかを示すために、いわゆる「タイトルコメント」が記述されています。それが/* */で囲まれていればC、行頭に//があればC++、'で始まっていればVisual Basic、#ならUNIX系のシェルスクリプト……などと、瞬時に判別できます。したがって、//はC++のときにだけ使う方が合理的です。

1行コメントと複数行コメント

多くの言語では、先頭にコメント記号を置いて、それ以降改行までをコメントとする1行コメントが採用されています。Cのように/* */で囲まれた範囲すべてをコメントと見なす仕様はあまり多くありません。

複数行のコメントは、ある行がコメントなのかソースコードなのか判別しづらい場合もあります。また、コメントにあまり長い文章を書くと、かえってソースを読み解くことが難しくなります。

基本的には、1行で端的に説明するのが理想です。しかし、記号的でソース自体を端的に記述できるCでは、場合によっては1行のソースコードに対して長めの注釈を付ける必要も生じてきます。そのようなときに、/* */による複数行のコメントが役立ちます。

ただし、この/* */で囲むというスタイルは、うっかりミスを招くこともあります。先頭の/*だけで終端を示す*/を忘れた場合、/*以降のすべてがコメントと見なされてコンパイルされない場合があるのです。

それがたまたまソースの先頭に記述したタイトルコメントだったら、プログラムとしては何も記述されていないことになります。もし関数定義の途中だったら、その関数は途中で終わっていることになります。エディタがC言語の文法にしたがってキーワードや記号などを太字や色で識別できるようになっていればいいのですが、そのような機能のないエディタでは、コンパイラのエラーメッセージからミスを見付けるのに苦労します。

欠点とまでは言えませんが、囲み式の複数行コメントは『閉じ忘れ』のミスが生じやすいので気を付けましょう。これを防ぐには、コメントを書く前にまず半角で/* */と入力しておき、その後、その中にコメントを記述する癖を付ければいいでしょう。

//のような1行コメントでは、こういったミスは発生しません。