|
| 1 | +# 代码注释 |
| 2 | + |
| 3 | +代码注释几乎是每个编程语言都必有的功能,它的主要作用就是让开发者能够更好更快速的阅读代码理解其的意思。在 C++ 中有着多种的注释类型,每个注释类型都有其对应的使用方式和适合的使用场景。 |
| 4 | + |
| 5 | +## 基础注释 |
| 6 | + |
| 7 | +在 C++ 中最基本且最常用的注释类型有以下两种: |
| 8 | + |
| 9 | +* **单行注释** |
| 10 | +* **多行注释** |
| 11 | + |
| 12 | +### 单行注释 |
| 13 | + |
| 14 | +单行注释以两个双斜杠 `//` 开始直至本行结束,编译器会在编译的过程中自动忽略双斜杠后面的全部内容。 |
| 15 | + |
| 16 | +单行注释通常用来描述解释变量的用处,其通常写在需要解释的代码上方一行。具体使用方式如下: |
| 17 | + |
| 18 | +```CPP |
| 19 | +// 小明的年龄为18岁 |
| 20 | +int age = 18; |
| 21 | +``` |
| 22 | + |
| 23 | +由于单行注释的特性也可以将其写在某行代码的后方,具体使用场景为定义了多个变量需要描述解释。 |
| 24 | + |
| 25 | +```{note} |
| 26 | +为了让代码看起来更加的整洁美观,我们通常会使用 `Tab` 键来让代码或注释缩进使其与上下行的代码垂直对齐。 |
| 27 | +``` |
| 28 | + |
| 29 | +```CPP |
| 30 | +char C = "A"; // 字母 A |
| 31 | +int ID = "5201314" // 身份标识 |
| 32 | +``` |
| 33 | + |
| 34 | +### 多行注释 |
| 35 | + |
| 36 | +多行注释以单斜杠加星号开头 `/*` 以星号加单斜杠结尾 `*/` 编译器会忽略这两个多行注释符号内的所有内容,常用于需要大量说明的代码。例如用来描述某个函数的功能和所需的参数。 |
| 37 | + |
| 38 | +```CPP |
| 39 | +/* |
| 40 | + 下方函数是用来进行加法计算的 |
| 41 | + 调用此函数进行 A + B 操作 |
| 42 | + 将返回计算结果 |
| 43 | +*/ |
| 44 | + |
| 45 | +int Addition(int A, int B) { |
| 46 | + int C = A + B; |
| 47 | + return C; |
| 48 | +} |
| 49 | +``` |
| 50 | +
|
| 51 | +如果想要美化多行注释代码可以添加一些 ASCII 符号进行美化。 |
| 52 | +
|
| 53 | +```CPP |
| 54 | +/* |
| 55 | + ==== 函数说明 ==== |
| 56 | + 这里是函数的使用说明 |
| 57 | +
|
| 58 | + ==== 参数说明 ==== |
| 59 | + 这里是参数的传参说明 |
| 60 | +*/ |
| 61 | +``` |
| 62 | + |
| 63 | +如果在开发过程中你需要临时屏蔽某些代码但又不想删除的时候也可以使用注释来进行屏蔽。 |
| 64 | + |
| 65 | +```CPP |
| 66 | +// int C = A + B; |
| 67 | +``` |
| 68 | + |
| 69 | +## 高级注释 |
| 70 | + |
| 71 | +在普通注释的基础上高级注释可以使用特殊工具如 `Doxygen` 提取 C++ 的代码和对应的 `Doxygen` 注释编译成一个在线文档或 PDF 能够让开发者在无需翻阅大量代码的前提下精准的找到自己想要查看的代码的对应描述,同时高级注释语法支持将整个代码文件进行注释描述。 |
| 72 | + |
| 73 | +### 代码文件注释 |
| 74 | + |
| 75 | +```CPP |
| 76 | +/** |
| 77 | + * @file 当前代码文件名 |
| 78 | + * @brief 此代码文件的说明 |
| 79 | + * @details 一些细节 |
| 80 | + * @mainpage 工程概览 |
| 81 | + * @author 作者 |
| 82 | + * @email 邮箱 |
| 83 | + * @version 版本号 |
| 84 | + * @date 年-月-日 |
| 85 | + * @license 版权 |
| 86 | + */ |
| 87 | +``` |
| 88 | + |
| 89 | +更多高级注释语法可以前往 `Doxygen` 官网 <https://www.doxygen.nl/manual/index.html> 查看官方文档 |
| 90 | + |
| 91 | +## 提醒注释 |
| 92 | + |
| 93 | +该类型注释通常由开发工具定义与实现具体功能,其中 `TODO` 已经被绝大多数的开发工具所兼容,它的功能是显示一个待办事项常用于用来标记接下来所要进行的任务或所需修改的功能。 |
| 94 | + |
| 95 | +### TODO |
| 96 | + |
| 97 | +```CPP |
| 98 | +// TODO 接下来编写一个加法计算函数 |
| 99 | + |
| 100 | +// TODO 老板让我优化 *** 代码的运行速度 |
| 101 | +``` |
| 102 | + |
| 103 | +对于提醒类型的注释通常你的开发工具会在控制台中显示且高亮该注释所在行,有些开发工具会在你编译的时候终止并显示此行直至你删除了这个待办事项注释。 |
| 104 | + |
| 105 | +### 其它提醒注释 |
| 106 | + |
| 107 | +| 注释类型 | 作用和使用场景 | 示例 | |
| 108 | +| :----------- | :-------------------------------------------------------------- | :------------------------------ | |
| 109 | +| **`TODO`** | **待办事项**:最常用的一种,用于标记任何需要完成的任务,比如一个尚未实现的功能或需要补充的逻辑。 | `// TODO: 实现用户身份验证逻辑` | |
| 110 | +| **`FIXME`** | **待修复**:明确指出代码中存在一个已知但尚未修复的 bug。它的紧急程度通常比 `TODO` 更高。 | `// FIXME: 当输入为负数时,此函数会崩溃` | |
| 111 | +| **`HACK`** | **临时方案**:标记一段走了捷径或使用了不优雅方式实现的代码。这表示它能正常工作,但不是最佳实践,未来应该用更好的方法重构。 | `// HACK: 为了临时解决渲染延迟,这里强制刷新了两次` | |
| 112 | +| **`UNDONE`** | **未完成**:表示某段代码或一个功能块的开发被中断,尚未彻底完成。 | `// UNDONE: 重构到一半,需要继续完成剩余部分` | |
| 113 | +| **`XXX`** | **警示/危险**:用于标记代码中存在严重问题或可能导致风险的地方,需要特别注意。 | `// XXX: 这里的内存管理逻辑可能导致泄露` | |
| 114 | +| **`NOTE`** | **笔记/说明**:用于对某段复杂的代码进行解释或提供额外信息,帮助他人理解。 | `// NOTE: 这里使用位运算是为了提高性能` | |
| 115 | + |
| 116 | +```{note} |
| 117 | +并不是所有的开发工具都支持提醒注释,具体是否能用还要在你的开发工具上进行对应的测试。 |
| 118 | +``` |
| 119 | + |
| 120 | +## 注释规则 |
| 121 | + |
| 122 | +编写代码注释时候通常需要遵守以下几个默认行为规范。 |
| 123 | + |
| 124 | +**实时注释**: 当你对代码进行了改动请确保注释也进行对应的更新,防止出现注释与代码的实际功能有差异。 |
| 125 | + |
| 126 | +**表明实意**: 注释应该表达代码无法直接传递的实际意思,而不是重复的表达代码的内容。 |
0 commit comments