C/C 代码风格(仅供参考)

作为一个程序员,代码就代表我们的颜值。好的代码,看起来赏心悦目,读起来易于理解。好的代码要在一定代码量的基础上积累起来,但也要有意识地遵循一定的规范。有几点需要遵循:

1.代码总体结构——层次分明,干净整洁

1.1 代码结构格式化,包括间隔、多级代码缩进、大括号(比如C系代码)、分号;
1.2 为了提高代码的美观型和易读性,区间与区间之间最好以一行*或-之类的间距;
1.3 合理运用空行。空行可以用来隔开相对独立的代码块,有利于阅读和理解。但是不要使用超过一行的空行,对空间,别太奢侈了;
示例:

/************************* 全局变量定义 *********************************/
datatype global_var;
struct example {
    datatype element1;
    datatype element2;
    ......
} module1;

/****************************** 函数声明 *************************/
datatype function1(datatype, datatype);
datatype function2(datatype, datatype);

/************************ 函数定义 **************************/
datatype function(datatype para)
{
    datatype a;        
    struct example module2;

    if(condition)
    {
        operation;
    }
    else {
        operation;
    }

    for(init;condition;increment)
    {
        operation;
    }

    switch(var)
    {
        case constant: {
            operation;    
        }
        case ...
        default: {
            operation;
        }
    }

    return x;
}

2.命名规范——望文生义,见字如面

命名包括宏、变量、函数、类(面向对象)、命名空间等;
2.1命名需要遵循由其命名便知道其意义的原则;

宏全为大写的英文字母。

变量命名区分全局变量、导出变量、常量、局部变量,最好区分类型(如果有的话)。变量名称前的字母含义要求如下:
g:global全局;a:array数组;s:static静态;c:const不变常数;n:变量;p:指针。

2.2 可采用业界的一些命名规范,比如匈牙利命名、驼峰命名、下划线命名,同一个项目必须统一。
我比较喜欢用下划线命名法(UNIX/Linux风格),举例如下:

// 宏命名
#define FALSE 0
#define TURE  1
#define BUFF_SIZE 10

//变量命名
char ga_usart1_rx_buf[BUFF_SIZE] = {0};  //全局数组

int gn_usart_rx_data = 0;        //全局变量

int n_temp_data = 0;//局部变量

static char sn_static_data = 0;//静态变量

const static int csn_constant_data = 0;    //const类型的静态变量

int *gp_usart1_rx_buf;        //全局指针

2.3 还可以利用文件名作为前缀来命名
如我个人经常这样命名:

// 文件名:bsp_led.c


// 变量名
int bsp_led_num;    //LED灯的数量
int bsp_led_delay;  //灯的延时时间

// 函数名
void bsp_led_on(void);    // 开启LED灯
void bsp_led_off(void);   // 关闭LED灯

这种命名方式,能够直观的看出变量或函数属于哪个功能模块,其含义是什么。

3,高效使用注释

3.1 注释代码段,注释逻辑选择。上面提到运用空行分割开逻辑相对独立的代码,那么请在空行的下一行也写点下面代码段要干什么的语句吧。如果有if else等逻辑选择的时候,麻烦也花几秒钟写上判断的依据和结果好吗?逻辑难懂且关键,您懂的!
3.2 为不容易理解类变量注释。类变量特别是私有的类变量没有人要求注释,但是为了能够快速的了解您表示的是什么,还是写点什么吧!您知道我英文不算好!
3.3 独立的代码模块、文件、函数需要撰写注释以说明其实现意图、原理、怎么使用等(比如函数的输入输出参数等),独立的代码文件和模块(比如类)最好写上作者、日期、联系方式、版本号等信息,以便后期做追踪;
3.4 并不是注释越多越好,相反,完全模块化、结构化的程序很多地方注释完全可以精简;

1)文件注释要求

至少要包含文件名称、文件作用说明、作者、最后修改时间。

/* 文件:main.c
 * 说明:主程序,包含main函数...
 * 作者:xxx
 * 日期:x年x月x日
 * 版权:归属xxxx
*******************************/

2)函数注释要求

至少要包含函数名称、函数作用说明、形参含义、返回值含义、编码人、最后修改时间。
我个人代码注释风格举例:

/* 名称:function1(我一般省略名称这一项)
 * 功能:干啥用的
 * 输入:参数1——代表啥意思;参数2——代表啥意思;...
 * 返回:什么结果;没有写无
*************************************************/

4,程序结构化、模块化

4.1 程序设计中有多种架构可供选择,不同的语言、不同的情景可能会有些差异,例如整体组织采用分层结构、模块化设计;模块需要高内聚、低耦合,最好一个.c和.h文件代表一个模块。
4.2 养成写开发文档的习惯。对于每一个页面设计(前接页,后接页),包括功能说明,页面设计,页面名称,存放位置等,应当有相应的文档记载。对于发生改动的地方,需要保留原来的部分(注释或备份),并说明备份文件存放的地方,改动时间,修改人;对于程序部分,应该有相应的设计流程,改动的时候,也需要设计改动流程图,以便以后进行对比,和查找问题所在位置,以及问题的严重性分析。
4.3 要记住写出的代码并不是给自己一个人看的,你需要保证你的代码清晰、一致,别的程序员能够读懂,要有code review环节。

5,多读优秀的源代码、多实践

5.1 多看优秀程序员的代码,汲取好的方法和技巧,比如Linux内核源码。
5.2 接触一项技术要深入了解和实践,如果时间允许,最好从零开始搭建,不断总结体会。

猜你喜欢

转载自blog.csdn.net/tuxinbang1989/article/details/100558352