首页 > 其他分享 >C编码规范

C编码规范

时间:2024-08-27 21:49:09浏览次数:12  
标签:编码 定义 复杂度 规范 break 可测性 代码 指针

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
    

标签:编码,定义,复杂度,规范,break,可测性,代码,指针
From: https://www.cnblogs.com/solicit/p/18383616

相关文章

  • limu|P28|Batch Normalization批量规范化
    目录为什么需要批量规范化困难原因需求如何实现批量规范化公式使用部位为什么卷积层的通道维相当于全连接层的特征维?补充:为什么1*1卷积层相当于逐像素全连接层?深入思考BN的作用代码实现Q&ABatchNorm和LayerNorm的解释与对比为什么需要批量规范化困难训练深层神经网络并使其在较......
  • 【编程规范具体案例(基于Qt、微软、谷歌和AUTOSAR C++14 参考)】 C++ 编码规范 之并发篇
    目录标题并发目录12.并发编程规范12.1线程创建与管理规则12.1.1\[必须]明确定义线程的生命周期管理策略12.1.2\[必须]为关键线程设置明确的标识符12.1.3\[必须]在多线程环境中安全地处理异常12.2线程同步规则12.2.1\[必须]使用线程安......
  • 软件设计师全套备考系列文章15 -- 数据库:规范化、控制功能、大数据
    软考--软件设计师(15)--数据库:规范化、控制功能、大数据文章目录软考--软件设计师(15)--数据库:规范化、控制功能、大数据前言一、章节考点二、规范化三、数据库的控制功能四、大数据、数据仓库前言考试时间:每年5月、11月,软件设计师每年都会开考。考试条件:三不限......
  • 手把手教你—搭建Vue3企业级项目规范+基础封装配置
    前言如何搭建一个简易脚手架。核心需求是输入项目命令,clone准备好的项目模板,拉到本地后,装一下依赖,就可以直接开发了。不用每次都花大量时间,去搭建项目规范和做必要的封装配置。经过简单寻找后,发现没有符合自己预期的。从0到1搭建一个具备完善规范的Vue3开发模板✨,并手把手带大......
  • Kubernetes API资源规范
    1.资源类型和资源对象1.1资源类型(ResourceTypes)1.1.1核心资源类型KubernetesAPIPrimitive用于描述在Kubernetes上运行应用程序的基本组件,即俗称的Kubernetes对象(Object)它们持久存储于APIServer上,用于描述集群的状态依据资源的主要功能作为分类标准,Kubernetes......
  • 数模国赛冲刺 | 数据预处理方法合集(数据清洗、数据变换与数据编码)
    ​数据预处理方法合集(数据清洗、数据变换与数据编码)数据预处理是数据科学和机器学习项目成功的基础步骤。通过适当的数据预处理,可以确保数据的质量、提升模型的性能,并为后续的建模和分析打下坚实的基础。忽视数据预处理可能导致模型训练失败或性能不佳,甚至得出错误的结论。因......
  • Java 入门指南:异常处理的实践规范
    在Java中处理异常并不是一个简单的事情。需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。抛出或捕获异常的时候,有很多不同的情况需要考虑,而且大部分事情都是为了改善代码的可读性或者API的可用性。异常不仅仅是一个错误控制机制,也是一个通信媒......
  • ACCESS Base64编码原理
    为了更详细地解释Base64编码的过程,我们可以从头开始逐步分解这个过程。假设我们有一段简单的ASCII文本"Hello",我们将详细展示如何将其转换为Base64编码。 1.获取文本的ASCII码首先,将"Hello"转换为其ASCII码值。每个字符的ASCII码如下:-'H'=72-'e'=101-......
  • skf接口规范
      #ifndef__SKF_TYPE_DEF_H__#define__SKF_TYPE_DEF_H__#include"base_type.h"#ifndef_WINDOWS#definePACKED_ST(st)__attribute__((packed,aligned(1)))st#else#pragmapack(push,skf,1)#definePACKED_ST(st)st#endif/*6.4.1版本......
  • 上升 AI辅助编码:主流IDE中的智能代码补全和生成功能对比
    在软件开发领域,AI辅助编码已经成为提升开发效率和代码质量的重要手段。特别是在集成开发环境(IDE)中,智能代码补全和生成功能通过利用先进的算法和深度学习技术,为开发者提供了前所未有的编码体验。以下是对主流IDE中智能代码补全和生成功能的详细对比,旨在探讨这些功能如何助力......