卧龙小说网> > > 1.3节练习

1.3节练习

1.3节练习

1.3节练习

练习1.7:编译一个包含不正确的嵌套注释的程序,观察编译器返回的错误信息。

出题思路:一方面了解非法嵌套注释,另一方面体会编译器对较为复杂的错误如何给出错误信息,程序员应如何利用这些信息讯速定位、修改错误。

解答:对不正确的嵌套注释,不同编译器给出的错误信息可能是不同的,而且通常很难理解。例如,用tdm-gcc 4.8.1编译器编译1.3节中错误嵌套的程序:

#include <iostream>

/*

* 注释对/* */不能嵌套。

* “不能嵌套”几个字会被认为是源码,

* 像剩余程序一样处理

*/

int main()

{

return 0;

}

编译器会报告:

4 error: stray '\262' in program

4 error: stray '\273' in program

(篇幅所限,后续错误信息略。)

原因是编译器将第一个“*/”看作注释结束,之后的中文文字看作下一条语句,从而给出非法字符的错误信息。如果“*/”之后是英文文字,或是使用其他编译器进行编译,给出的可能是完全不同的错误信息。而且这些错误信息都很难直接与注释错误嵌套挂上钩,程序员需要有一定的经验才能快速定位错误,确定错误原因。

练习1.8:指出下列哪些输出语句是合法的(如果有的话):

std::cout << "/*";

std::cout << "*/";

std::cout << /* "*/" */;

std::cout << /* "*/" /* "/*" */;

预测编译这些语句会产生什么样的结果,实际编译这些语句来验证你的答案(编写一个小程序,每次将上述一条语句作为其主体),改正每个编译错误。

出题思路:进一步熟悉更复杂的正确和不正确的注释语句。

解答:第一条和第二条语句显然是合法的。

在第三条语句中,第一个双引号被注释掉了,因此<<运算符真正被编译的内容是" */,编译器认为这是一个不完整的字符串,所以会报告:

7 error: missing terminating " character

即。缺少结束的双引号。在分号前补上一个双引号,这条语句就变为正确的了。

第四条看起来很混乱,但它是正确的。第一个双引号被注释掉了,第四个双引号也被注释掉了,第二个双引号和第三个双引号之间的" /* "被认为是字符串的文字内容。但是,这样的程序风格显然是不好的。


普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。

好书推荐:《我的剧本世界在自主运行》《我是舰娘》《我的师妹是妖女》《交错世界之学院都市》《认清现实后,她们开始追夫火葬场》《好徒儿你就饶了为师伐》

目录