1

我的问题来自以下 2 行简单的 C++ 代码:

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

在我看来,注释定界符/* */会吃掉字符";以及cout<<"它们内部的字符。所以这两行必须等于:

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

来自 C常见问题解答

字符序列 /* 和 */ 在双引号字符串中并不特殊,因此不会引入注释,因为程序(特别是生成 C 代码作为输出的程序)可能想要打印它们。(很难想象为什么有人想要或需要在带引号的字符串中放置注释。很容易想象一个程序需要打印“/*”。)

于 2012-11-12T08:14:44.907 回答