📄 一句话概括
注释是写给人和未来的自己看的说明,编译器把它当空气——完全忽略、不占运行时间。两种写法:// 管一行(最常用),/* ... */ 管一段(不能嵌套)。写注释的原则只有一条:写"为什么",不写"是什么"——// 把 x 加 1 这种废话不如不写。
一、两种写法
// ① 单行注释:从 // 开始,到本行结束
int age = 18; // 也可以跟在语句后面
/* ② 多行注释:
从 /* 开始,到 */ 结束
可以跨好几行 */
// 单行 |
/* */ 多行 |
|
|---|---|---|
| 范围 | 本行 // 之后全部 |
/* 到 */ 之间全部 |
| 常见用法 | 行末补充说明、临时注释掉一行 | 文件头说明、注释掉一大段 |
| 陷阱 | 无 | 不能嵌套——里面再出现 */ 会提前结束 |
嵌套陷阱具体长这样:
/* 外层注释开始
/* 里面又想写一段注释 */
cout << "这行其实已经不在注释里了"; // ← 编译器会来编译它
*/ // ← 这个 */ 反而报错
建议:日常就用 //,最不容易出岔子。
二、注释的三个正经用途
- 说明"为什么"——这是注释的主职
cpp const double RATE = 0.13; // 增值税税率,2026 年起按此执行 - 临时屏蔽代码(调试时最常用)
cpp cout << "调试:a = " << a << endl; // 暂时注释掉 - 标记待办
cpp // TODO: 这里还没处理除数为 0 的情况 // FIXME: 输入负数时结果不对
📝 一条实用判断
把注释读出来,如果它只是在复述代码写了什么(// 把 x 加 1),删掉;
如果它在解释为什么这么写、有什么坑、业务上代表什么(// 汇率天天变,所以先换算成"分"用整数算),留下。
三、动手 Demo:两个实验,看清"注释被忽略"和"// 不总是注释"
实验一:注释不影响结果
新建 comment.cpp,写两行 cout,然后在中间塞 20 行 // 注释,编译运行——输出一字不差。说明预处理器把它们全丢掉了。
实验二:字符串里的 // 不是注释(新手踩过的大坑)
#include <iostream>
using namespace std;
int main() {
cout << "https://www.example.com" << endl; // 网址里的 // 只是普通字符
return 0;
}
看到什么算成功:输出完整网址 https://www.example.com,没有被截断。
理解要点:// 只有在字符串引号外面才起注释作用。反过来,如果网址里写了中文引号或漏了结尾引号,才会真的出问题。
30 秒实验:写一句 cout << "abc" /* 中间的注释 */ << "def" << endl;,看看输出是 abcdef——说明注释可以插在语句中间,编译器直接跳过它。
四、常见误区
- "注释越多越专业"——错。好代码大部分能自解释,注释只补"为什么"。满屏废话注释的代码,反而更难读
- "注释写错了不影响运行,所以随便写"——过期的注释比没有注释更危险:代码改了、注释没改,下一个人(包括三个月后的你)会被误导
- "注释掉一大段代码是好习惯"——长期保留的"死代码"会让文件越来越乱。临时调试可以,留下的历史交给版本管理工具(第 13 章之后会提到)
- "中文注释会乱码,只好写英文"——不必。把 Dev-C++ 的编码设成 UTF-8(1.2.2 首启三设置里的第三项),中文注释就正常。乱码是编码设置问题,不是中文的锅
自测三问(点开对答案)
1. 两种注释怎么写?——`//` 注释本行剩余部分;`/* ... */` 注释中间一段(**不能嵌套**)。 2. 注释会影响程序运行速度吗?——不会。它在**预处理阶段就被丢掉**了,最终程序里根本不存在。 3. 什么样的注释是好注释?——解释**为什么这么写**(意图、坑、业务规则);复述代码的属于废话注释。- ☑ 常量及符号
相关笔记
- 第一个C++程序 —— 四段料的最后一块
- #include 指令 —— 同样"被预处理器处理"的指令
- Dev-C++的下载与安装 —— UTF-8 编码设置(中文注释不乱码的关键)