3.7 KiB
3.7 KiB
格式与风格
缩进与换行
-
仅使用4个空格进行代码缩进,禁止使用tab键。
-
每行代码长度控制在120个字符内,超过换行,下一行缩进4个空格。
-
大括号
{与}单独占一行。 例如:if (condition) { do_something(); } void func(void) { ... }
空格与空行
-
操作符两边各加一个空格,自加自减不加空格。 例如:
x = 1; a + b; i++; -
逗号
,后加一个空格。 例如:void foo(int a, char b);
头文件
-
头文件为避免重复包含,使用
_FILE_H_宏进行保护。 -
头文件按字母顺序导入,库文件优先。库头文件使用
<>导入,其余头文件使用""导入。 例如:#include <stdlib.h> #include <stdio.h> #include "bar.h" #include "foo.h"
命名规范
类型
-
枚举类型命名全部小写,下划线分隔,枚举常量首字母大写。 例如:
enum color_type { Red, Green, Blue, Light_Pink, }; -
结构体、联合体、类型定义命名小写,下划线分隔。 例如:
struct foo { char *name; union coordinate { int x; int y; } };
函数与变量
-
函数命名小写,下划线分隔。 例如:
void do_something(int arg1, char arg2) { ... } -
变量命名小写,下划线分隔 例如:
int num_times; char *pointer; -
宏定义全部大写,下划线分隔。宏函数遵守函数命名规则。 例如:
#define PI 3.14 -
typedef定义使用类型名加
_t后缀, 结构体等默认_t为指针类型。 例如:typedef unsigned int mr_uint32_t; typedef struct mr_object *mr_object_t;
文件名
-
文件名使用小写字母和下划线,不使用大写字母,配置文件以
config结尾。 例如:foo_bar.c test_case.h mrconfig.h
宏
-
宏定义全部大写,下划线分隔,用户可修改的宏配置需加
CFG标识。 例如:#define MR_CFG_OBJECT_NAME_SIZE 15
注释规范
-
单行注释使用
/* */,多行注释使用:/* * 多行注释 * 第二行 */ -
函数注释使用Doxygen风格:
/** * @brief This function change the type of the object. * * @param object The object to be changed. * @param type The type of the object. * * @return MR_ERR_OK on success, otherwise an error code. */ mr_err_t mr_object_add(mr_object_t object, const char *name, enum mr_object_type type) { ... } -
结构体,宏等定义需添加注释:
/** * @struct Object */ struct mr_object { char name[MR_CFG_OBJECT_NAME_SIZE]; enum mr_object_type type; struct mr_list list; }; /** * @def Null pointer */ #define MR_NULL (void *)0 -
函数声明时需用注释将所有同类函数包含:
/** * @addtogroup Object * @{ */ mr_object_container_t mr_object_container_find(enum mr_object_type type); mr_object_t mr_object_find(const char *name, enum mr_object_type type); mr_err_t mr_object_add(mr_object_t object, const char *name, enum mr_object_type type); mr_err_t mr_object_remove(mr_object_t object); mr_err_t mr_object_change_type(mr_object_t object, enum mr_object_type type); void mr_object_rename(mr_object_t object, char *name); /** @} */