我使用的C代码编程规范

Posted by LuckXiang on April 13, 2016

为了写出优雅简洁的C代码,内核代码采用内核规范 《Linux kernel coding style》,应用代码采用以下编程规范。

  • 命名规范
  • 排版工整
  • 注释得当

命名规范

先介绍两种命名法:

  • 大驼峰命名法:单词之间连续书写,中间不添加空格,下划线,连接线等乱七八糟的东西。如CamelCase
  • 文学命名法:首字母大写,单词之间用下划线连接,表现为英文中的句子。如 That_date_used_for_show_age

命名要展现对象的功能,容易理解,添加适当的前后缀在C语言中还可以起到命名空间的作用。

文件名

单词小写,单词之间用下划线连接,如:get_server_data.c

单词大写,单词之间用下划线连接,如:#define MAX_FILE (100)

结构体,联合体

用typedef定义的别名用大驼峰+Class,不是typedef的直接大驼峰,类型定义用类型小写单词,单词之间用下划线连接。结构体我一般不用typedef,如:

struct AppNim{
    uint32_t tuner; 
    uint32_t ts_src; 
    uint32_t demud_id;
    ...... 
};

typedef struct _AppNimClass {
    uint32_t tuner; 
    uint32_t ts_src; 
    uint32_t demud_id;
    ...... 
}AppNimClass;

枚举

用typedef定义的别名用大驼峰+Enum,不是typedef的直接大驼峰,类型定义用类型大写前缀+单词,单词之间用下划线连接。如:

enum UsbPlug{
    USB_PLUG_IN,
    USB_PLUG_OUT, 
    ......
};

typedef enum _UsbPlugEnum{
    USB_PLUG_IN,
    USB_PLUG_OUT, 
    ......
}UsbPlugEnum;

变量

  • 全局变量: That下划线小写单词加下划线连字符,如:That_max_year
  • 静态变量: thiz下划线小写单词加下划线连字符, 如:this_max_year
  • 局部变量: 小写单词下划线连字符,如:max_year
  • 变量名选择名词或使用带有修饰的名词

函数

  • 外部函数用文学命名法,如:That_date_used_for_show_age
  • 静态函数用下划线+模块名+下划线+功能名,如:static int _math_add(int x, int y);
  • 如果是一个对象的操作函数,则采用以对象为中心,采用“对象+动作”命名方式。如:Cmm_player_play
    • 第一个参数为对象,并用thiz命名,如:Cmm_player_play(AppPlayerClass *thiz, AppPlayerEnum mode);
    • 对象有自己的生命周期,有相应的创建和销毁函数 如:
      Cmm_player_get_instance(void)
      Cmm_player_create(void)
      Cmm_player_destroy(void)

排版工整

排版工整要求整片代码要保持一致的风格,如果是修改别人的代码,那就要和原来的风格保持一致。

合理使用空格

  • 等号两边用空格
  • 运算符两边用空格,除非作为函数参数。
  • 函数参数之间用空格
  • 语句末的分号与前面内容不要加空格
  • 参数名与括号之间不要加空格
  • 其他能让代码更美观的地方

合理使用括号

  • 用括号分隔子表达式,不要只靠默认优先级来判断
  • 用括号分隔if/while/for等语句代码块,只有一行代码看情况添加。
  • 花括号独占一行,除了do{}while();

注释得当

  • 文件头部说明信息
  • 文件修改纪录
  • 关键代码注释
  • 修改代码先修改注释
  • 代码就是最好的注释,不要添加多余注释