1

私の質問は、C++コードの次の2行から来ています。

cout<<"/*";
cout<<"*/";

私の意見では、コメント区切り文字は文字を/* */食べ、文字";cout<<"中にあります。したがって、2つの線は次のように等しくなければなりません。

cout<<"";

驚いたことに、コードをコンパイルしてテストすると、プログラムは次のように出力します。

/**/

プログラムがコメント区切り文字を通常の文字として認識する可能性があります。どうしてそうなるのでしょうか?コードはgcc-c++-4.7.2でコンパイルされました。

4

2 に答える 2

3

C標準では、パーサーの実行方法が規定されており、(さまざまな理由で)文字列リテラルの解析を開始すると、コメント文字が含まれていても、最後の二重引用符に到達するまで停止しません。真ん中。これらのいくつかを試してください:

cout<<"// this won't give an error";

cout<<"Does it print /* this here */?";
于 2012-11-12T08:14:43.983 に答える
3

CFAQから。

文字シーケンス/*および*/は、二重引用符で囲まれた文字列内では特別ではないため、コメントを導入しません。プログラム(特に、出力としてCコードを生成するプログラム)がそれらを出力する場合があるためです。(引用された文字列内にコメントを配置する必要がある理由を想像するのは難しいです。「/ *」を出力する必要があるプログラムを想像するのは簡単です。)

于 2012-11-12T08:14:44.907 に答える