糕工的代码规范分享 2024/8上

代码规范
原文链接:https://www.zhihu.com/question/265095298

1.缩进、对齐、花括号
    <1>使用四个空格代替一个tab制表符,并且每个缩进等级使用一次。
    <2>在操作符之间加入一个空格,函数与左括号无空格,每个形参","后加一个空格。如下:
        int res = sum(2, 3);
    <3>左花括号总是跟在操作符或者函数名同一行,譬如if,else,do,switch,如下:
    if(NULL != point) {
    
    }
    <4>在比较运算中,将常量(譬如枚举,宏定义和NULL/0)放在左侧以避免==错误书写为=。
    <5>总是使用/* */即使是单行注释。对于多行注释开头使用空格*来对齐。如下:
    /*
     * this is a value about age.
    */    
    <6>每个复合语句必须包含{},即使只有一条语句或者空语句,else总是与if的}在同一行。
    <7>空while,for,do-while也要包含{}
    <8>switch-case,为每个case添加一个级别的缩进。并且总是包含default分支。
    <9>switch-case,当需要使用局部变量时,请在case:后使用{}将变量定义在其中。
    
2.声明与定义
    <1>不要初始化静态和全局变量为0(或NULL),让编译器做。
    <2>在同一行定义和声明所有相同类型的局部变量。
    <3>当存在多个类型的变量时,按照先自定义类型(枚举,结构体,联合体等),后整型(无符号优先),
    最后是浮点类型的顺序定义。如下:
        
        typedef struct{
            int   age;
            char* name;
        }person_t, *person_pt;/*定义结构体和结构体指针类型*/
    
        int main(void){
            
            person_t person1;
            
            uint16_t u16num;
        
            float       fnum1;
        
        }
    <4>总是在块的开头声明局部变量,在第一个可执行语句之前;在for循环中声明计数器变量(C99特性)。
    <5>避免变量声明时通过函数调用赋值,采用先声明,后赋值的方式实现。
    <6>除了char,double,float之外其余使用<stdint.h>的变量类型,带长度的整型类型,譬如uint8_t;
    <7>不要直接使用函数或者结果来做条件;要将其和相对应的内容进行比较。
       并且对于bool类型,应当使用 true 和false 或者!来做比较。如下:
        error:if(ptr) if(a)
        right: if(NULL != ptr) if(0 != a)
    <8>多使用前增量(减),减少后增量,这和运行效率有关。多用++i,少用i++;
    <9>使用size_t类型对长度或大小这类变量进行定义。
    <10>对于不应该修改实参的情况,请使用const对形参修饰。
    <11>对于不定类型的指针使用void*;
    <12>总是使用sizeof,而非魔法数字。
    <13>总是使用括号来表示优先级,而非默认的规则,这有利于可读性。
    <14>减少使用变长数组,转而使用malloc动态分配不定长的数据。
    <15>在定义指针时,总是将*和变量类型对齐     譬如使用int* ptr;而不是int *ptr;
    <16>不要在第一个可执行语句之后声明变量,可以在下一个缩进级别(下一个内嵌的{}层级)开头定义
    
3.结构体与枚举
    <1>当未使用typedef的结构体,只有名称的时候,其类型名不应带有_t;
    <2>当使用typedef的结构体,有别名的时候,其原生类型名不应带_t,别名类型名应带有_t;    
    <3>对结构体成员初始化时,使用C99风格 = {.membera = a,.memberb = b};初始化其成员。
    
4.预编译与注释
    <1>宏应当使用字母大写和下划线的形式书写,并且使用()对输入参数和最终结果进行保护。
    <2>当宏使用多个语句的时候,使用do-while(0)形式,不过while(0)会增加一两个nop空指令。
    <3>使用#if和#else时,不必像if-else那样缩进,全部对齐首格就好。并在#endif处注释是哪个#if结束了
    <4>总是对CPP做检查,如下:
    #ifdef __cplusplus
    extern "C" {
    #endif /* __cplusplus */

    /* File content here */

    #ifdef __cplusplus
    }
    #endif /* __cplusplus */
    <5>对结构体成员变量的注释总是使用12*4个空格偏移开始,而对于函数头部注释,文本行则使用5*4个空格偏移。

    
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值