C编码规范

C编码规范

  1. 宏定义:除去返回值,其它使用宏定义或者枚举定义数字

    #define MAX 1
    
  2. 输入参数校验:每次传入的参数都要进行判别参数是否有问题。

  3. 结构分配内存后,要进行初始化,不然其指针会指向异常区域并不为空

  4. 数据库最好要名字大写,可读性高

  5. 使用宏定义,定义基础的函数比如SQL语句

  6. 使用链表,所有的结点要进行堆分配,然后手动释放

  7. global_dmac = ethdr->d_addr.addr_bytes; // 直接赋值可能只会复制为指针的引用或指针,采用memcpy进行复制。比如指针赋给指针,并没有复制内容,只是使另一个指针也指向相同的内存。所以遇到数组需要考虑是否需要进行复制内容。

  8. 使用宏定义完成补丁,补丁不影响原本的代码

  9. 使用宏定义完成基础的操作,例如链表的基本操作、SQL语句

  10. 圈复杂度cyclomatic complexity计算 = e - n + 2*P,e是边的数量,n是节点的数量(多个end只计算一次),P表示程序中独立组件、不相互调用的模块数量。圈复杂度与分支结构的数量成正比,用于描述一段代码“可测性”很好。

    e : 边的数量
    n : 结点的数量
    V(G) \in [0, 10] : 代码质量不错,清晰结构化,可测性高、维护成本低
    V(G) \in [11, 15] :可能存在需要拆分的代码,需要进行重构
    V(G) \in [16, \infinite): 必须进行重构,代码复杂
    v - [20, 30] 非常复杂,可测性低,维护
    V > 30 不可读,不可测,维护成本非常高
    switch(day){ 
        case Day::Red: break; // 1
        case Day::Green: break; // 2
        default: break;  // 3
    }
    
  11. 降低圈复杂度的重构计数

    Extract Method提炼函数

  12. 认知复杂度:打断1次逻辑,认知复杂度加1;打断的是逻辑嵌套,认知复杂度加1

    for (){ // +1
        for (){ // +2
            for (){ // +3
                if (){ // +4
                    continue; // +1 打断1次加1
                }
            }
        }
    }
    // coComplex: 11
    
posted @ 2024-08-27 21:47  LemHou  阅读(45)  评论(0)    收藏  举报