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),接着再看更方便。
好书推荐:《我的剧本世界在自主运行》、《我是舰娘》、《我的师妹是妖女》、《交错世界之学院都市》、《认清现实后,她们开始追夫火葬场》、《好徒儿你就饶了为师伐》、