/** * @brief Copies bytes from a source memory area to a destination memory area, * where both areas may not overlap. * * @param[out] dest The memory area to copy to. * @param[in] src The memory area to copy from. * @param[in] n The number of bytes to copy */void memcpy(void *dest, const void *src, size_t n);
1 2 3 4 5 6 7 8 9
返回值@return { description of the return value }. @return是对返回结果的描述。 如果有多种返回结果请用以下格式表示(* -中有 6 个空格实际上是因为按了两次 TAB);如果没有返回值请跳过该命令。
代码注释指南
作者
ccb5
本文说明 XFusion c/cpp 代码的注释规范。
简介
XFusion c/cpp 代码的注释使用 doxygen 风格的注释,如果使用 vscode 编写代码,请安装
cschlosser.doxdocgen
插件,方便生成 doxygen 风格的注释。原则
注释是帮助读者在阅读和使用代码的信息。
注释的位置:
注释可以添加到函数、结构体、类型定义、枚举、宏等任何需要说明代码作用的地方。 但是注释只能在需要说明的代码的上方或者右侧。注释在需要说明的代码的右侧时,请注意使用
/*!< 注释 */
样式的的注释,以表明当前注释说明的对象是左侧的代码。如:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
注释的重点:
函数中的注释应当概括一段代码的作用,以及解释说明代码中重点以及难以理解的部分。 好的代码(拥有规范的命名、操作明确等特征)应当可以说明代码本身在做什么,即代码能够自己解释自己。因此没必要在函数中每一行都解释代码在做什么,而是在必要情况下说明代码做了什么,为什么这么做。
注释的格式:
通常建议只使用
/* */
的注释格式。头文件的注释:
要求尽可能详细以及全面,函数功能参数的注释、结构体的注释、枚举类型的注释等等都要完善,好的头文件能够做到让用户不看源码就可以使用这个模块。
示例
文件头注释
2
3
4
5
6
7
8
9
10
11
12
13
TODO: 文件头注释规范。
如何注释
以下代码是函数注释示例,位于
components/xf_hal/xf_spi/xf_spi.h
。2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
从以上示例中,可以看出一个函数注释由以下部分组成:
特殊注释块(Special comment blocks).
特殊注释块是如下样式的注释块:
2
3
这是 Javadoc 样式的注释块,当然还有其他样式的注释块,但是为了统一风格,xfusion 中只使用 Javadoc 样式的注释块。
特殊命令(Special Commands).
命令是如
@brief @param @return
样式的代码,命令样式除了以@
开头外,还有以反斜杠开头的\
样式,xfusion 中只使用以@
开头的命令样式。在函数注释中,常用命令有以下几种:
简介
@brief { brief description }
.@brief
命令用于简要介绍文件、函数、变量、结构体等代码的功能。这是最常用的命令。 注意!如果注释块中只有一个@brief
,请注意删除多余的空行;如果有多个命令,注意将@brief
与其余命令间隔一行,如下所示。2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
参数
@param '['dir']' <parameter-name> { parameter description }
.@param
命令通常用于介绍函数或者函数原型(类型定义的函数原型)的参数的作用。@param
命令有一个可选参数,方向dir
,这个参数紧靠@param
,可以是[in]
、[in, out]
和[out]
. XFusion 中如果不注明方向dir
,则默认为[in]
;一旦参数涉及传出,比如函数内会修改指针指向的空间,则必须标明传出双向[in, out]
和传出[out]
.@param
命令中的参数名<parameter-name>
在插件生成 doxygen 风格注释时会自动生成。@param
命令中的参数描述{ parameter description }
用于描述该参数的作用,必要时请加上@ref
或者@see
命令告知读者有用的参考信息。 如果函数没有参数,请跳过该命令。2
3
4
5
6
7
8
9
返回值
@return { description of the return value }
.@return
是对返回结果的描述。 如果有多种返回结果请用以下格式表示(* -
中有 6 个空格实际上是因为按了两次 TAB);如果没有返回值请跳过该命令。2
3
4
5
6
7
8
9
10
11
12
13
注意事项
@note { text }
或@attention { attention text }
以及警告@warning { warning message }
.@note
或@attention
命令用于告诉读者需要注意的重要信息。@warning
命令告诉读者必须怎么做或者禁止怎么做,否则会产生什么后果。再次强调,为了节省时间,请用功能类似于
cschlosser.doxdocgen
的 vscode 插件生成 doxygen 风格注释的模板。 以下代码是生成的注释模板,插件可以帮你节省时间。2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
以下代码是结构体注释示例,位于
components/xf_hal/xf_spi/xf_spi_types.h
。2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
做得更好
除了
@brief, @param, @return
等等常用命令,还有@details, @code, @example
等命令可以让你的注释做得更出色。如以下示例所示。2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
其他命令.
代码块
@code['{'<word>'}']
. 代码块是注释中被解释为代码的部分,可以显示语法高亮。用于说明在实际代码中如何使用某个函数或其他代码。@code
与@endcode
一起出现。@code
的可选参数['{'<word>'}']
用于指定语法高亮的语言,在xf_spi_dev_set_cfg()
示例中通过@code{c}
指定为 c 语言的语法高亮。详细描述
@details { detailed description }
. 就像@brief
开始一个简短的描述,@details
开始详细的描述。你也可以开始一个新的段落(空白行),那么就不需要@details
命令了。@details
可以使用 markdown 语法。示例文件
@example['{lineno}'] <file-name>
.@example
命令可以在生成的注释中链接到示例文件。@example
命令可选参数{lineno}
可以启用示例的行号分组.
定义组
@defgroup <name> (group title)
.@defgroup
命令用于表示注释块中包含类、模块、概念、文件或命名空间主题的文档,也就是用于对符号进行分类。您还可以使用组作为其他组的成员,从而建立组的层次结构。@defgroup
命令的参数<name>
是唯一的标识符,且不能有空格。这意味着同一个名字不能@defgroup
两次。@defgroup
命令的参数(group title)
是组的标题,括号是可选的,中间可以有空格。 可以通过组前的开始标记@{
和组后的结束标记@}
将成员分组在一起。 注意@}
后面请注释组的标题,告诉告诉读者当前括号的归属。2
3
4
5
6
7
8
9
10
11
添加组
@addtogroup <name> [(title)]
.@addtogroup
命令用于将代码添加到指定组中,如果组不存在时则会创建组。类似与@defgroup
,但是@addtogroup
可以重复使用而不会警告,@addtogroup
命令的参数<name>
是标识符。@addtogroup
命令的参数[(title)]
是组的标题,是可选项。 注意@}
后面请注释组的标题,告诉告诉读者当前括号的归属。@addtogroup
用法类似于@defgroup
。此处不在赘述。参考文献