注释:
两种,分别为单行注释和界定符对注释。单行注释 // 开始,以换行符结束,注释右侧所有内容被编译器忽视。界定符对注释 /*和*/,编译器将落在/*和*/之间的所有内容当作注释。为更好区分,在界定注释符对中每一行前加上*.
注:第二类注释无法嵌套使用。
练习1.7
编译一个包含不正确的嵌套注释程序,观察编译器返回的错误信息。
答:
对于不正确的嵌套注释,不同编译器给出的错误信息可能是不同的,而且通常很难理解。编译器将第一个"*/"看作注释结束,之后出现的中文文字看作下一条语句,从而给出非法字符的错误信息。如果之后为英文文字,给出不同的错误信息。而且这些错误很难直接与注释错误嵌套挂上钩,程序员需要有一定经验才能快速定位错误,确定错误原因。
练习1.8
指出下列哪些输出语句是合法的
std::cout<<"/*";
std::cout<<"*/";
std::cout<</*"*/"*/;
std::cout<</*"*/"/*"/*"*/;
预测编译这些语句会产生什么结果,实际编译这些语句验证答案(编写一个小程序,每次将上述一条语句作为主体),改正每个编译错误。
答:猜想:一二行语句合法,”“中语句作为字符串输出
三四行不合法,存在注释嵌套
验证思路:每行前加//,运行程序观察错误,以此类推
#include <iostream>
int main()
{
std::cout << "/*";
std::cout << "*/";
//std::cout <</*"*/"*/;
//std::cout <</*"*/"/*" /* "*/;
return 0;
}
验证得:猜想错误,一二四条语句正确,第三条语句错误。
第三条第一个双引号被注释掉,<<运算符后真正被编译的内容是”*/,编译器认为这是一个不完整的字符串,报告缺少右引号
7 error:missing terminating " character
第四条第一个第四个双引号被注释掉,第二个第三个双引号之间/*被认为是字符串内容。
程序运行输出/*
但这样的风格显然是不好的
ps:它为什么要让写小程序啊,不会写,答案也没有,看到让写小程序的时候吓一跳,进阶这么1快吗??应该就是写到程序里验证吧。