コメント

提供: Appmethod Topics
移動先: 案内検索

ホワイトスペースの概要:インデックス への移動

コメントは、プログラムに注釈を付けるために使われるテキストです。コメントはプログラマだけが使用するもので、解析の前にソース テキストから削除されます。

コメントを記述する方法には、C 方式と C++ 方式の 2 種類があります。このコンパイラでは両方の方式をサポートしています。また、オプションとしてコメントのネストを許す拡張機能もあります。ANSI 互換のコンパイルをする場合以外は、C プログラムと C++ プログラムの両方で、どの種類のコメントでも使用することができます。

また、他の移植性の問題を回避するため、コメント内でのホワイトスペースおよび区切り記号の使い方のガイドラインを守ってください。これについてはこのトピック内で後述します。

C のコメント

C のコメントは、/* という 2 つのシンボルの後に続く任意の文字シーケンスです。このコメントは、開始を表す /* の後に最初に出現する */ という 2 つのシンボルで終了します。コメントの区切りを示すこの 4 つのシンボルを含めたシーケンス全体が、マクロ展開の後で 1 つの空白文字に置き換えられます。一部の C 処理系では、空白文字に置き換えるのではなく完全にコメントが削除されます。

このコンパイラでは、/**/ を用いた移植性の低いトークン連結方法をサポートしていません。トークンの連結は、ANSI で指定されている ## という 2 つのシンボルを使って行います。

#define VAR(i,j)  (i/**/j)    /* 機能しない */
#define VAR(i,j)  (i##j)      /* OK */
#define VAR(i,j)  (i ## j)    /* これも OK */

このコンパイラでは、次の宣言は、

int /* 宣言 */ i /* カウンタ */;

次の 3 つのトークンとして解析されます。

int   i;

トークンの連結の詳細は、「## によるトークンの連結」を参照してください。

C++ のコメント

C++ では、2 つの連続するスラッシュ(//)を使って 1 行コメントを記述することができます。このコメントは任意の位置から開始し、次の改行まで続きます。

class X {  // ここがコメント
... };

C 言語のコードでも // を使ってコメントを記述することができます。この機能は Appmethod C++ コンパイラに固有のもので、通常は移植性がありません。

コメントのネスト

ANSI C ではコメントのネストはできません。次のように行全体をコメントにしようとすると、

/*  int /* 宣言 */ i /* カウンタ */; */

最初の /* の範囲が最初の */ で終わってしまうため、うまくいきません。これは次のように解析され、

i ; */

構文エラーとなります。

コメントのネストを使用できるようにするには、[プロジェクト|オプション...|C++ コンパイラ|拡張|ソース|コメントのネストを有効にする]を[true]にします。

区切り記号とホワイトスペース

まれにですが、/* や // の前、あるいは */ の後にホワイトスペースを置くことによって、移植性の問題を回避できることがあります(このホワイトスペースは構文として必須のものではありません)。たとえば次の C++ コードは、

int i = j/ /* k で割る */ k;
+m;

int i = j +m; と解析されます。従来の C 方式による

int i = j/k;
+m;

のようには解析されません。次のように明瞭に記述すると、

int i = j/ /* k で割る */ k;
+m;

問題を回避することができます。

関連項目