C/C++接口要求在.h文件中进行注释,然后借助Doxygen工具提取注释内容,生成API参考。C语言注释分为两种:
传统风格的注释,一般用/* */或//来标记,不用于生成文档。
能用Doxygen生成文档的注释,我们把它叫做文档注释,一般用/** */来标记文档注释。
本指导介绍文件、常量、变量、枚举、结构体、联合、函数、typedef、define和示例代码的注释规范,包括注释的内容上的规范和格式上的规范。
说明:
本指导仅针对需要对外部开发者暴露的信息,此类信息使用能用Doxygen生成文档的注释格式/** */,目的是可以在注释中提取API参考。
不需要对外开发暴露的信息,请使用传统风格注释格式/* */或//,并遵守编程规范的要求。“.h”和“.idl”会作为交付件发布出去,所以代码以及注释都要合规。例如,对于copyright、日期等信息等信息,不需要在API参考中体现,但需要在代码中写作,请采用/* */格式在文件顶部进行注释。
本规范仅适用OpenHarmony库。如果是标准的语言库或三方定义的api,使用对应的规范; 系统需要提供相应的外部语言库版本等基本信息查询的api接口。
@since在文件File、定义分组、类的注释中必选,其余元素按条件必选,填写场景为:File、分组或类为1.0版本,但是其包含的元素(例如函数、变量等)为1.1版本新增,则此时必须对该元素标记@since。@verison为可选,如果有库版本号,需要填写@verison。
模块的版本号实现上必须提供可查询版本号getversion()的api接口。
每个库至少定义一个模块,不同库不能定义为相同模块。
注释中的模块名称、文件名称、函数名称等,请与实际代码保持一致,即使在中文描述信息中,也不要随意改为中文。
/**
* @addtogroup 模块名
* @{
*
* @brief 一句话描述该模块的作用。
*
* (必选)详细描述该模块的主要功能、使用场景和使用建议。
* 例如:xxx模块提供xxx能力,包括xxx、xxx等。当需要xx时,可使用本模块的接口xxx。本模块接口可与xxx联合使用,实现xxx。
*
* @since OS的版本号
* @version 库的版本号
*/
...
/** @} */
/**
* @addtogroup bitmap
* @{
*
* @brief ANativeWindow represents the producer end of an image queue.
*
* It is the C counterpart of the android.view.Surface object in Java,
* and can be converted both ways. Depending on the consumer, images
* submitted to ANativeWindow can be shown on the display or sent to
* other consumers, such as video encoders.
*
* @since 1.0
*/
intAndroidBitmap_unlock(JNIEnv*env, jobjectjbitmap);
...
/** @} */
/**
* @file 文件名
*
* @brief 一句话描述该头文件的作用。
*
* (必选)详细描述该头文件的主要功能、使用场景和使用建议。
*
* @since OS的版本号
* @version 库的版本号
*/
/**
* @file bitmap.h
*
* @brief API for accessing a native window.
*
* @since 1.0
* @version 1.0
*/
/**
* @brief 一句话描述该常量/变量的含义。
*
* (可选)详细描述该常量/变量的作用、使用限制和建议、取值范围,以及取到边界值、非法值的后果。
*/
<const> int gExample;
/**
* @brief The name of the function that NativeInstance looks for when launching its
* native code.
*
* This is the default function that is used, you can specify "android.app.func_name"
* string meta-data in your manifest to use a different function.
*/
extern ANativeActivity_createFunc ANativeActivity_onCreate;
/**
* @brief 一句话描述该枚举的作用。
*
* (可选)详细描述该枚举的主要功能、使用场景和使用建议。
*/
enum EnumName
{
/** 描述枚举值1的含义 */
EnumMermber1 = 1,
/** 描述枚举值2的含义 */
EnumMermber2,
/** 描述枚举值3的含义 */
EnumMermber3
};
/**
* @brief Flags for ANativeActivity_showSoftInput; see the Java InputMethodManager
* API for documentation.
*/
enum {
/**
* Implicit request to show the input window, not as the result
* of a direct request by the user.
*/
ANATIVEACTIVITY_SHOW_SOFT_INPUT_IMPLICIT = 0x0001,
/**
* The user has forced the input method open (such as by
* long-pressing menu) so it should not be closed until they
* explicitly do so.
*/
ANATIVEACTIVITY_SHOW_SOFT_INPUT_FORCED = 0x0002,
};
/**
* @brief 一句话描述该结构体或联合体的作用。
*
* (可选)详细描述该结构体或联合体的作用、使用场合和建议等。
*/
Typedef struct StructName
{
/** 描述成员1的含义 */
unsigned long StructMember1;
/** 描述成员2的含义 */
unsigned long StructMember2;
};
/**
* @brief These are the callbacks the framework makes into a native application.
*
* All of these callbacks happen on the main thread of the application.
* By default, all callbacks are NULL; set to a pointer to your own function
* to have it called.
*/
typedef struct ANativeActivityCallbacks {
/**
* NativeActivity has started. See Java documentation for Activity.onStart()
* for more information.
*/
void (*onStart)(ANativeActivity*activity);
/**
* NativeActivity has resumed. See Java documentation for Activity.onResume()
* for more information.
*/
void (*onResume)(ANativeActivity*activity);
} ANativeActivityCallbacks;
简要描述和详细描述之间需要空行。
详细描述中,如果有多个段落,每段必须以“\n”结束。
文档标记和详细描述之间需要空行。
在注释过程中涉及到到另外一个接口,可以在该接口前加“#”或用{@link}包起来,则在生成的手册中将自动添加到该接口的链接。如“@param param1 该参数可以通过 #fuction1 获取”或“@param param1 该参数可以通过 {@link fuction1} 获取”。但是@see后所写的函数不需要,工具会自动生成链接。
针对.h文件,每个参数的注释中需要表明参数的输入输出属性;针对.idl文件,参数的输入输出属性由函数中的[in]和[out]标签保证,注释中不需要再次说明。
函数注释中涉及的文档标记及用法如下:
标记名称 | 标记说明 |
---|---|
@param | 格式为:@param+参数名+参数描述,一个参数使用一个@param标记。参数描述需要包含如下信息: - 参数的作用、使用限制和建议 - 参数的取值范围,以及取到边界值、非法值得后果 - 如果存在参数设置方面的建议值和经验值,请描述 |
@return | 格式为:@return+返回值类型+返回值描述。每个/每种返回值使用一个@return标记。返回值描述介绍返回值的含义,没有返回值,则请删除该标记。 当返回值类型只有两种,可采用类似“@return 成功返回0,失败返回负值。”的句式表达,其余情况,均采用一个返回值对应一个@return的表达方式。 |
@see | 用于标记与该方法相关联的方法:功能相近或者存在关系。 |
@since | 版本信息(开发内部对齐)。 |
/**
* @brief 一句话描述该函数的作用。
*
* 详细描述该函数的主要功能、使用场景和使用建议。
*
* @param (可选)后接参数名和参数描述,一个参数使用一个@param标记。参数描述写作要点:1.参数的作用、使用限制和建议;2.参数的取值范围,以及取到边界值、非法值的后果;3.如果存在参数设置方面的建议值或经验值,请描述。如果该方法没有参数,则请删除该标记。
*
* @return(可选)后接返回值类型和返回值描述,一个返回值使用一个@return标记。返回值描述介绍返回值的含义,如果该方法没有返回值,则请删除该标记。
*
* @see (可选)当存在与该方法相关联的函数时(功能相近或者存在关系),可以通过@see建立到参考方法的链接。如果不涉及,则请删除该标记。
*
* @since API Version
*/
int function (int param1, int param2);
/**
* @brief Allocate dynamic memory.
*
* This API is used to allocate a memory block of which the size is specified and update module mem used.
*
* @param pool Pointer to the memory pool that contains the memory block to be allocated.
* @param size Size of the memory block to be allocated (unit: byte).
* @param moduleID module ID (0~MODULE_MAX).
*
* @return Returns VOID* if memory is successfully allocated with the starting address of the allocated memory block.
* @return Returns NULL if memory fails to be allocated.
*
* @see LOS_MemRealloc | LOS_MemAllocAlign | LOS_MemFree
*
* since 1.0
*/
extern VOID *LOS_MemMalloc(VOID *pool, UINT32 size, UINT32 moduleID);
/**
* @brief 获取组件参数设置。
*
* 当组件处于除OMX_StateInvalid(组件状态异常)之外的其他状态,用户可通过此接口获取组件参数,组件状态详见{@link OMX_STATETYPE}。
*
* @param index 待填充结构的索引,详见OMX IL定义的OMX_INDEXTYPE。
* @param inParamStruct 指向由组件填充的应用程序分配的结构体指针。
* @param outParamStruct 指向由组件填充的应用程序分配的结构体指针。
*
* @return HDF_SUCCESS 表示获取参数成功。
* @return HDF_ERR_INVALID_PARAM 表示参数无效,获取参数失败。
* @return HDF_FAILURE 表示执行失败。
* @return 其他值表示底层返回失败,具体错误码详见OpenMAX IL定义的OMX_ERRORTYPE。
*
* @since 3.2
*/
typdef定义的类型为常量或变量,则采用普通常量和变量注释(C\C++)规范。
typdef定义的类型为枚举,则采用枚举Enum注释(C\C++)规范。
typdef定义的类型为结构体或联合体,则采用结构体Struct和联合体Union注释(C\C++)规范。
typdef定义的类型为函数,则采用函数Function注释(C\C++)规范。
define定义的类型为常量或变量,则采用普通常量和变量注释(C\C++)规范。
define定义的类型为函数,则采用函数Function注释(C\C++)规范。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。