コメント
ホワイトスペースの概要:インデックス への移動
コメントは、プログラムに注釈を付けるために使われるテキストです。コメントはプログラマだけが使用するもので、解析の前にソース テキストから削除されます。
コメントを記述する方法には、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 言語のコードでも // を使ってコメントを記述することができます。この機能は C++Builder コンパイラに固有のもので、通常は移植性がありません。
コメントのネスト
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;
問題を回避することができます。