【C语言】C语言代码的编写规范、注释规范

【C语言】C语言代码规范


文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、编写规范
    • a、MISRA-C
      • 1、背景与目的
      • 2、发展历程
      • 3、准则内容
      • 4、应用与优势
    • b、华为
  • 二、注释规范
    • 1.文件头注释
    • 2.函数头注释
    • 3.代码行注释
    • 4.特殊注释
  • 三、参考资料
  • 总结

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、编写规范

a、MISRA-C

MISRA-C工业标准的C编程规范(中文版).pdf
MISRA-C是由汽车工业软件可靠性协会(Motor Industry Software Reliability Association,MISRA)制定的一套针对C语言的编码准则,以下是对MISRA-C的详细介绍:

1、背景与目的

背景:MISRA最初为汽车行业开发了这些规范,用于提升汽车制造业中嵌入式代码的安全性、可靠性。
目的:减少代码中的错误,提高代码的可读性、可维护性和可靠性,确保代码在不同的编译器和平台上的可移植性。

2、发展历程

MISRA先后发布了三版编码准则,分别是MISRA C:1998、MISRA C:2004和MISRA C:2012。其中,MISRA C:2012(第三版,第一次修订版)发布于2019年2月,整合了此前发布的AMD1(修订案1,MISRA C:2012的附加安全准则)和TC1(技术更正1)的内容,并后续经过修订。

3、准则内容

MISRA-C规范包含了一系列关于C语言编码的规则和指导,这些规则旨在规范诸如类型转换、指针使用、内存分配、代码风格等方面的编程实践。

MISRA C:2012规定了一个C语言的子集,共有175条编码准则(guideline),分为指令(directive)和规则(rule)两部分:

指令:共17项,不具备完整描述,仅分析源代码无法进行合规性判定,需要结合设计文档或开发人员经验综合判定。指令均为不可判定。
规则:共158条,具备完整的描述和要求,无需额外的信息就可以对源代码进行合规性判定。规则分为可判定或不可判定。
此外,准则有三种分类,分别是Mandatory(强制性准则,绝对不允许违反)、Required(要求性准则,只有符合MISRA对偏差的要求时才允许违反)和Advisory(建议性准则,只需在合理的范围内遵循,无需符合正式偏差,若不遵循应做好记录)。准则的作用域分为“单一翻译单元”和“系统”。

4、应用与优势

应用领域:虽然MISRA-C最初是为汽车行业设计的,但现已成为其他行业(如航空航天、医疗设备和铁路系统)的编码标准。
优势:遵循MISRA-C规范可以降低软件缺陷的风险,提升代码的可靠性、可读性、可移植性和可维护性。同时,它还有助于预防缺陷的产生,减少因软件问题而导致的召回和损失。

b、华为

华为C语言编程规范 PDF

二、注释规范

1.文件头注释

/*
* File: example.c
* Author: Abin
* Date: 2023-03-01
* Description: This file contains an example of C code.
* Version: 1.0
*/

2.函数头注释

/*
* Function: add
* Description: Adds two integers and returns the result.
* Input: a - the first integer
*        b - the second integer
* Output: None
* Returns: The sum of a and b
*/
int add(int a, int b) {return a + b;
}

3.代码行注释

int i = 0; // initialize i to zero

4.特殊注释

// TODO: implement this function
int foo() {// FIXME: this code causes a memory leakreturn 0;
}

三、参考资料

C代码的注释规范
C语言编写规范之注释
C 语言编码规范(MISRA-C-:2004)
C语言 - MISRA代码规范
C语言代码注释规范

C代码风格及注释(个人规范)

总结

本文仅仅简单介绍了【C语言】C语言代码规范,评论区欢迎讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/886883.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1652: 拆炸弹 (Defuse the Bomb)超详细解释

LeetCode 1652: 拆炸弹 (Defuse the Bomb) 题目描述 你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为 n 的 循环 数组 code 以及一个密钥 k 。 为了获得正确的密码,你需要替换掉每一个数字。所有数字会 同时 被替换。 如果 k …

Spring工作流程

(3)案例工作流程 启动服务器初始化过程 1.服务器启动,执行ServletContainersInitConfig类,初始化web容器功能类似于以前的web.xml 2.执行createServletApplicationContext方法,创建了WebApplicationContext对象 该方法…

unity 中 RectTransform 的常用几个属性

RectTransform rectTransform this.GetComponent<RectTransform>(); rectTransform this.transform as RectTransform; Vector3 vector1 rectTransform.position; //自身轴心点相对于锚点的位置&#xff08;编译器显示的pos&#xff09; …

C语言第13节:指针(3)

1. 回调函数 回调函数的基本思想是&#xff0c;将函数指针作为参数传递给另一个函数&#xff0c;并在需要时通过这个函数指针调用对应的函数。这种方式允许一个函数对执行的内容进行控制&#xff0c;而不需要知道具体的实现细节。 回调函数在以下场景中尤为有用&#xff1a; …

用pyspark把kafka主题数据经过etl导入另一个主题中的有关报错

首先看一下我们的示例代码 import os from pyspark.sql import SparkSession import pyspark.sql.functions as F """ ------------------------------------------Description : TODO&#xff1a;SourceFile : etl_stream_kafkaAuthor : zxxDate : 2024/11/…

【MyBatis 源码阅读与笔记】Mapper 接口的动态代理实现

MyBatis 源码阅读与笔记 题目&#xff1a;Mapper 接口的动态代理实现 研究 MyBatis 如何通过动态代理为 Mapper 接口创建实现类。重点分析 MapperProxy 类&#xff0c;理解其如何拦截方法调用并执行 SQL。 笔记 1 动态代理原理 MyBatis 使用 JDK 动态代理为 Mapper 接口创建…

STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)

配置EXIT外部中断其实就是把GPIO刀NVIC的各个外设配置好 第一步&#xff1a;配置RCC&#xff0c;把我们涉及到的外设的时钟都打开 &#xff08;此处EXTI是默认打开的&#xff0c;而NVIC是内核外设无需配置&#xff09; 第二步&#xff1a;配置GPIO,选择端口为输入模式 第三…

深入解析PostgreSQL中的PL/pgSQL语法

在数据库管理系统中&#xff0c;PostgreSQL因其强大的功能和稳定性而受到广泛欢迎。其中&#xff0c;PL/pgSQL作为PostgreSQL的过程化语言&#xff0c;为用户提供了更为灵活和强大的编程能力。本文将深入解析PL/pgSQL的语法&#xff0c;帮助读者更好地掌握这门语言&#xff0c;…

misc设备驱动

MISC 理解 简化创建设备号&#xff0c;cdev&#xff0c;class&#xff0c;device 的步骤。 设备树 代码 模块初始化和退出 平台下驱动匹配和移除 MiSC 结构体 文件描述符的处理函数 其他

layui合并table相同内的行

<table border"1" id"table1" class"layui-table"><thead><tr><th><b>姓名</b></th><th><b>项目</b></th><th><b>任务</b></th><th><b>…

java ssm 羽绒服商城网站 在线商城 在线服饰销售网站 源码 jsp

一、项目简介 本项目是一套基于SSM的羽绒服商城网站&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&#xff…

程序里sendStringParametersAsUnicode=true的配置导致sql server cpu使用率高问题处理

一 问题描述 近期生产环境几台sql server从库cpu使用率总是打满&#xff0c;发现抓的带变量值的慢sql&#xff0c;手动代入变量值执行并不慢&#xff0c;秒级返回&#xff0c;不知道问题出在哪里。 二 问题排查 用扩展事件或者sql profiler抓慢sql&#xff0c;抓到了变量值&…

《强激光与粒子束》

投 稿 须 知 1. 投稿著作所有列名作者皆同意在投稿文章经《强激光与粒子束》&#xff08;简称《强》刊&#xff09;刊登后&#xff0c;其著作财产权即转让给《强激光与粒子束》编辑部&#xff0c;但作者仍保有著作人身权&#xff0c;并保有本著作未来自行集结、教学等个人使用…

基于 MUSA 的大语言模型推理和服务框架vLLM

1. 引言​ vLLM是一个高性能且内存高效的大语言模型推理和服务框架&#xff0c;也是当前业界使用范围最广的大模型推理框架&#xff0c;截至目前github star数28.4k。该框架性能优秀&#xff0c;而且部署容易&#xff0c;使用CUDA/ROCm提供GPU加速能力。但vLLM目前不支持使用摩…

OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!

【雪球导读】 「OpenAI推出ChatGPT桌面端」 OpenAI重磅推出ChatGPT桌面端&#xff0c;全面支持Windows和macOS系统&#xff01;这款新工具为用户在日常生活和工作中提供了前所未有的无缝交互体验。对于那些依赖桌面端进行开发工作的专业人士来说&#xff0c;这一更新带来了令人…

Python小白学习教程从入门到入坑------习题课3(基础巩固)

目录 一、选择题 二、实战题 2.1 实战一:从键盘获取一个4位整数&#xff0c;分别输出个位、十位、百位、千位上的数字 2.2 实战二&#xff1a;根据父母身高预测儿子的身高 一、选择题 1、以下哪项不是Python语言的保留字符&#xff08; C &#xff09; A. False B. and C. …

湘潭大学软件工程算法设计与分析考试复习笔记(四)

回顾 湘潭大学软件工程算法设计与分析考试复习笔记&#xff08;一&#xff09;湘潭大学软件工程算法设计与分析考试复习笔记&#xff08;二&#xff09;湘潭大学软件工程算法设计与分析考试复习笔记&#xff08;三&#xff09; 前言 现在是晚上十一点&#xff0c;我平时是十…

Python学习29天

二分查找 # 定义函数冒泡排序法从大到小排列 def bbble_sort(list):# i控制排序次数for i in range(len(list) - 1):# j控制每次排序比较次数for j in range(len(list) - 1 - i):if list[j] < list[j 1]:list[j], list[j 1] list[j 1], list[j] # 定义二分查找函数 def…

SparkSQL的执行过程:从源码角度解析逻辑计划、优化计划和物理计划

SparkSQL的执行过程可以分为以下几个阶段&#xff1a;从用户的SQL语句到最终生成的RDD执行&#xff0c;涵盖逻辑计划、优化计划和物理计划。以下是详细的源码角度解析&#xff1a; 1. 解析阶段&#xff08;Parsing&#xff09; SQL语句解析&#xff1a;Spark 使用 Catalyst 引…

(Linux)搭建静态网站——基于http/https协议的静态网站

简单了解nginx配置文件 1.下载并开启nginx服务 下载 [rootlocalhost ~]# dnf install nginx -y开启 [rootlocalhost ~]# systemctl restart nginx 1.(1)搭建静态网站——基于http协议的静态网站 实验1&#xff1a;搭建一个web服务器&#xff0c;访问该服务器时显示“hello w…