首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MISRA C 2012规则20.5 #不应使用undef

MISRA C 2012规则20.5是关于在C语言编程中不应使用undef的规定。具体解释如下:

概念:

MISRA C是一套用于嵌入式系统开发的C语言编程规范,旨在提高软件质量和可靠性。MISRA C 2012规则是其中的一部分,规定了一系列编码规范和最佳实践。

分类:

MISRA C 2012规则被分为多个类别,规则20.5属于预处理器指令类别。

优势:

遵循MISRA C 2012规则可以帮助开发人员编写更加可靠、安全和可维护的C代码。规则20.5的目的是防止在预处理阶段使用undef指令,以避免潜在的错误和不确定行为。

应用场景:

规则20.5适用于所有使用C语言进行开发的项目,特别是对于嵌入式系统和其他对代码质量要求较高的领域。

推荐的腾讯云相关产品:

腾讯云提供了一系列云计算产品和服务,以下是一些与C语言开发相关的产品推荐:

  1. 云服务器(ECS):提供了灵活可扩展的虚拟服务器实例,可用于部署和运行C语言应用程序。 产品介绍链接:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL版(CDB):提供了高性能、可靠的MySQL数据库服务,可用于存储和管理C语言应用程序的数据。 产品介绍链接:https://cloud.tencent.com/product/cdb_mysql
  3. 云函数(SCF):支持使用C语言编写无服务器函数,可用于实现轻量级的后端逻辑。 产品介绍链接:https://cloud.tencent.com/product/scf

请注意,以上仅是腾讯云提供的一些相关产品示例,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

让你的代码向MISRA靠近

MISRA全称是Motor Industry Software Reliability Association, 最早发布于1998年,现在最新的版本是MISRA 2012, 是评估软件质量常常参考的标准...MISRA所有的规则分为建议规则和强制规则,通常强制规则建议都遵守,那么有的人说了,这么多规则,我怎么记得住,没关系,不用死记硬背,在使用使用中慢慢熟悉,也可以在设计时候就打开MISRA检查,例如如果我们用...IAR在设计代码的时候,可以打开MISRA规则校验,在工程项目上点右键选options->C/C++Compiler进行配置打开MISRA。...如果对MISRA完全没有一点概念,建议先浏览下MISRA规则,选一两条来使能检查你的代码,如果一下全开的话,你的代码可能会检查出很多错误,你都傻了,例如可以先从简单的注释规则开始,例如MISRA规则...我们只使能这两条规则来跑一下原先没开MISRA能编译通过的工程 ? ? 可以看到出现了很多违反规则MISRA检查出来的错误,都是违反2.2注释规则 ?

74220
  • 号外号外:无规矩不成方圆(2)

    本文所有MISRA规则由嵌入式程序猿整理自网络,版权归原作者所有。 语言扩展规则 规则2.1(强制): 汇编语言应该被封装并隔离。...如果不管出于什么原因需要这样做,那么最好使用宏来完成。 规则2.2(强制): 源代码应该使用 /*…*/ 类型的注释。...许多编译器支持 // 类型的注释以做为对 C90的扩展。预处理指令(如#define)中 // 的使用可以改变,/*…*/ 和// 的混合使用也是不一致的。...这不仅是类型问题,因为不同的编译器(在C99之前)可能会有不同的行为。 规则2.3(强制): 字符序列 /* 不应出现在注释中。 C 不支持注释的嵌套,尽管一些编译器支持它以做为语言扩展。...一段注释以/* 开头,直到第一个*/ 为止,在这当中出现的任何/* 都违反了本规则规则2.4(建议): 代码段不应被“注释掉”(comment out )。

    48480

    自动化检测工具助力GJB 8114-2013 CC++语言编程安全子集标准落地应用

    GJB 8114的提出源于2005年发布的GJB 5369,全称为GJB 5359-2005《航天型号软件C语言安全子集》是航天领域嵌入式C语言的编程标准,GJB 8114对原有的规则进行了升级和扩充,...编程规范或标准的落实,一方面可以使代码开发人员在编程过程中遵守规则,从而保证代码的可理解性和可维护性;另一方面也可以让测试人员按照规则来检查代码,及时发现代码问题。...如果评测的目的不仅仅是满足GJB 8114标准,则可以借助CoBOT中超过1000个CC++检测器,包括MISRA 2004、MISRA 2008、MISRA 2012、ISO 17961、CWE、OWASP...根据CoBOT工具从军工客户落地使用的效果反馈来看,能够全面满足对于GJB 8114标准的检测,更多的价值是帮助客户发现了该标准之外的大量代码上的缺陷。...案例1:下面代码违反了数组下标必须大于等于零的正整数规则

    2.4K40

    教你MODBUS程序符合MISRA规则

    做嵌入式开发的广大工程师应该对MISRA C不陌生,他是Motor Industry Software Reliability Association 的缩写,现在很多的编译器已经集成对MISRA C规则检查...,但可以自己选择,也可以不检查,如果你的代码强制要求符合MISRA C规则,那么在软件实现上就要注意,不能随便写。...C语言中有时候指针很方便,但是MISRA C 对指针有很多限制和要求,要特别注意。...在通讯程序中其实用指针是很方便的,但鉴于MISRA C对指针的严格要求,现在在一般项目中,MODBUS程序,我都建议工程师使用数组,而且在头文件中利用宏定义来定义好数组索引对应的数据映射,那么用数组来实现也是很方便的...并且要注意对异常码的响应,MISRA C对函数的返回值也有要求,所以养成习惯慢慢代码就自然越来越符合规则

    75830

    号外号外:无规矩不成方圆

    所谓无规矩不成方圆,嵌入式软件开发一样,MISRA(Motor Industry Software Reliability Association),在软件设计中已经成为举足轻重的设计标准,保证软件的安全性...,许多的软件质量度量工具都支持MISRA规则,所以我们来学习下MISRA规则,提升你的嵌入式软件设计逼格。...要说明的是,“建议”不意味着可以忽略这些规则,而是应该遵守直至合理的实现。 首先来看看对开发环境的几条使用规则要求 不能有对未定义行为或未指定行为的依赖性。...如果其他某项规则中声明了某个特殊行为,那么就只有这项特定规则在其需要时给出背离性 多个编译器和/ 或语言只能在为语言/ 编译器/ 汇编器所适合的目标代码定义了通用接口标准时使用。...如果一个模块是以非C 语言实现的或是以不同的C 编译器编译的,那么必须要保证该模块能够正确地同其他模块集成。C 语言行为的某些特征依赖于编译器,于是这些行为必须能够为使用的编译器所理解。

    73370

    号外号外:无规矩不成方圆(4)

    不能使用三字母词 三字母词由2 个问号序列后跟1 个确定字符组成(如, ??- 代表“ ~”(非)符号,而??)代表“]”符号)。...它们可能会对 2 个问号标记的其他使用造成意外的混淆,例如字符串 “(Dateshould be in the form ??-??-??)”...具有内部作用域的标识符不应使用与具有外部作用域的标识符相同的名称,这会隐藏了外部标识符。 外部作用域和内部作用域的定义如下。...本规则只是不允许一个第二深层( second inner)的定义隐藏其外层的定义,如果第二个定义没有隐藏第一个定义,那么就不算违反本规则。...其他跟代码相关的规则,可以在具体的工程中,打开MISRA规则验证分析代码时候,对应代码看规则,印象会比较深刻。在这里就不赘述了。建议大家查看最新的规则。这个系列到这里就结束了,欢迎各位的关注

    52550

    号外号外:无规矩不成方圆(3)

    本文MISRA规则由嵌入式程序猿整理自网络,版权归原作者所有 今天我们来讲讲MISRA对文档的规则要求; 所有实现定义(implementation-defined)的行为的使用都应该文档化。...所有#pragma 指令的使用应该文档化并给出良好解释。 这项规则MISRA文档的使用者提供了产生其应用中使用的任何 pragma 的要求。...这是在使用规则 6.4 和规则 6.5 中描述的非良好定义的位域时遇到的特定问题。 C 当中的位域是该语言中最缺乏良好定义的部分之一。...位域的使用可能体现在两个主要方面: 为了在大的数据类型(同 union 一起)中访问独立的数据位或成组数据位。该用法是不允许的(见规则 18.4)。...产品代码中使用的所有库都要适应本文档给出的要求,并且要经过适当的验证。 本规则的对象是产品代码中的任意库,因此这些库可能包含编译器提供的标准库、其他第三方的库或者实验室中自己开发的库。

    657110

    FreeRTOS(四):命名规则

    最近在看 FreeRTOS 的源码,发现其命名规则和 Linux 很不一样,遂写文章记录一下。...MISRA-C全称 Motor Industry Software Reliability Association (汽车工业软件可靠性协会) FreeRTOS 源代码也有一些是不符合 MISRA 标准的...命名规则 RTOS内核和演示例程源代码使用以下规则: > 变量 uint32_t:前缀 ul,u 表示 unsigned,l 表示 long uint16_t:前缀 us,s 表示 short uint8..._t:前缀 uc,c 表示 char 非 stdint 类型的变量使用前缀 x,比如基本的 Type_t 和 TickType_t 类型 非 stdint 类型的无符号变量使用前缀 ux,比如 UbaseType_t...不使用 C++ 风格的双斜线(//)注释 布局:FreeRTOS的源代码被设计成尽可能的易于查看和阅读。

    2K30

    C Sharp(十七)

    C Sharp(十七) 發佈於 2018-12-04 这一篇,介绍一些 C# 中的比较常见的预处理指令。 CC++ 都有实际的预处理阶段,而在 C# 中是没有的,预处理指令是由编译器来处理。...基本规则 下面是预处理指令的主要规则: 预处理指令必须与 C# 代码处于不同行 包含预处理指令的行必须以 # 开头 # 字符前可以有空格 # 字符与预处理指令之间可以有空格 允许行尾有单行注释,不可以有多行注释...#define 和 #undef 指令 编译符号是只有两种状态的标识符。...,#undef 指令取消声明一个编译符号。...#undef PremiumVersion 注意: #define 和 #undef 指令只能用于任何 C# 代码之前,在 C# 代码开始之后,这两个指令就都不可以使用了。

    71510

    STM8S103固件库安装

    固件库允许在用户应用程序中使用任何设备,而无需深入研究每个外设的规格。 使用标准外围设备库有两个优点:它节省了本来可以花费在编码上的大量时间,同时减少了应用程序开发和集成成本。 ?...MISRA-C 2004在关键系统中使用C语言的准则,汽车工业软件可靠性协会 大家平时不在意这个相关的标准,其实是个误区 这种标准是强制的,硬性的,是性能的底线。...上表列出了代码中经常违反的MISRA-C 2004规则 ? ? 中英文对照 命名约定 标准外围设备库使用以下命名约定: PPP指的是任何外围设备的缩写,例如TIM2和TIM3。...一个文件中使用的常量在此文件中定义。头文件中定义了一个以上文件中使用的常量。所有常量均以大写形式编写。 寄存器被视为常量。他们的名字是大写的。...用于清除PPP标志的函数称为PPP_ClearFlag,例如I2C_ClearFlag。

    72430

    Java方法的重载

    以下是Java中使用重载的几个主要原因: 方便使用:重载可以让程序员使用同一个方法名来执行不同的操作,这样可以减少方法名的数量,使代码更简洁清晰。...System.out.println("ret2 = " + ret2); double a3 = 10.5; double b3 = 10.5; double c3...= 20.5; double ret3 = add(a3, b3, c3); System.out.println("ret3 = " + ret3); }...同一个方法名字, 提供不同版本的实现, 称为 方法重载 三、重载的规则 在Java中,方法重载(Method Overloading)指的是在同一个类中可以定义多个方法,这些方法具有相同的名称但参数类型...针对同一个类 在使用方法重载时,需要遵循以下规则: 方法名必须相同。 参数列表必须不同(类型、个数、顺序)。 返回类型可以相同也可以不同,但不能仅根据返回类型来区分方法。 方法的修饰符可以不同。

    7100

    【为宏正名】本应写入教科书的“世界设定”

    【说在前面的话】 ---- 市面上大部分C程序员对宏存在巨大的误解甚至是恐惧,并因此极力避免宏的适度使用,甚至将宏在封装中发挥正确作用的行为视作是对C语言的“背叛”——震惊之余,对于为什么大家会有这种想法的原因...,而是那些对宏来说如同“加法交换律、结合律”一样的基本规则和知识并没有认真且完整的出现在教科书中!...这些规则是如此简单,介绍一下根本无需多么复杂的篇幅。接下来,让我们简单的学习一下这些本应该写入教科书中的基本内容。注意,这与你们在其它公众号里学到的关于某些宏的基本使用方法是两回事。...比如,如果你想在 perl 里使用 C语言的预编译,那么就需要你在执行目标 .pl 文件前,先用C语言编译器对其进行一次预编译。...【宏的本质和替换规则】 很多人都知道宏的本质是文字替换,也就是说,预编译过程中宏会被替换成对应的字符串;然而在这一过程中所遵守的关键规则,很多人就不清楚了。

    76740

    C】程序的编译链接预处理详解(C语言内功,精炼,基础)

    一.程序的翻译环境和执行环境 在ANSI C的任何一种实现中,存在两个不同的环境 翻译环境,此过程中源代码转换为可执行的机器指令 执行环境,它用于实际执行代码 二.编译和链接的过程 三.编译的几个阶段...程序的执行便开始,接着调用main函数 开始执行程序代码,这个时候程序将使用一个运行的堆栈,存储函数的局部变量和返回值。...__LINE__ //文件当前的行号 __DATE__ //文件被编译的日期 __TIME__ //文件被编译的时间 __STDC__ //如果编译器遵循ANSI C,...其值为1,否则未定义 六.define/undef define的两个用法: 定义符号(标识符) 定义宏 undef:用于移除宏定义 1.define定义符号时,语法要求:...#define替换规则 八.#和##的应用 1.#作用:把一个宏的参数变成对应的字符串 2.

    16710

    C语言】宏定义

    宏名实际上就是一个标识符,必须要符合C语言当中标识符的语法规定的。         标识符的规则:字母、数字、下划线,不以数字开头,注意:关键字不能作为标识符!...命名事项         相信有些小伙伴已经发现了这个函数的宏的使用语法和函数是非常类似滴。所以语言本身就会没办法帮我们区分二者的一些使用。...#undef #undef 是为取消定义,用于移除一个宏的定义。 格式形式如下 #undef NAME 如果现在的一共名字需要被重新定义的话,那么旧名字就会被移除。...printf("num of:%d\n",NUM); } 运行结果⇥error(错误)         说明⇢上述代码原本是要打印NUM宏定义的值的,但是由于我们使用了#undef取消宏定义了。...拓展知识点⇥宏可以在任意地方使用

    32510

    编译预处理

    编译预处理是对C语言源程序编译前进行的预加工,这些操作是通过命令来实现的,即预编译命令,主要有三种,即宏定义、文件包含和条件编译。...这些规定是由编译系统规定的,由于不是C语言本身的组成部分,因此不能直接编译,而要经过编译器预处理再与源程序进行编译 书写规则:#+关键字(一行书写一个) 宏定义 用一个指定的标识符(名字)来代表一个字符串...使用带参宏时候,一定要注意要用实参替换形参。 宏展开通过宏体替换宏名(直接置换宏定义命令中相应的形参字符串,非形参字符保持不变) #define V(l,w,h) l*w*h ......命令来解除已有的宏定义 格式:#undef 宏名 \#define MAX 100 ......\#undef MAX 使得MAX在undef之前有效,之后便不再有效 重新宏定义 undef的另一个作用是重新进行宏定义,C语言中宏不能重复定义,即程序中不能使用同名的宏。

    18610
    领券