1212_MISRA_C规范学习笔记_控制表达式规则要求
全部学习汇总: GitHub - GreyZhang/misra_c_hacking: MISRA C, I'm coming! Happy hacking!
13.1, 赋值操作不能够用以产生布尔量。
直白的翻译不是这样翻译,但是我觉得表达的含义应该是这样子。这里就需要有一个明确的认识了,判断条件true或者false应该使用布尔量或者布尔量表达式,但是为了在表达上更加具备可读性,我觉得可以强制做一个要求:判断条件必须是布尔量表达式,哪怕携程bool_func() == true这样的表达也是可以提高可读性并且避免问题的。另外一点,在进行布尔量表达式按断的时候不要使用例子中的第二种情况,也就是避免跟赋值一起使用。至于最后一个,原则上应该放弃这样讨巧的设计方式。
13.2, 除非操作数是布尔量,否则对0的测试应该是显式的。
针对这一条规则,我个人的想法应该是前面提到过的:无论什么时候,无论是否是布尔量,都得采用显式的0值测试,这样从表达上来说可读性以及防错性会更好一些。
13.3,整形表达式不能够用以做相等性的判断。
说起这一条规则,有成长学习经历的记忆。我个人的基础软件的能力是我工作很久以后才逐步建立的,在第一家公司的4年时间里对此并没有很深的积累。到了第二家公司,其实这方面练手的机会也不是很多。但是我有机会看了一些文件,在文件中发现了这么一条规则。其实,第一次看到的时候还不理解,后来补充了浮点数据的表达之后基本就理解了。其实,多个浮点数的数值在某些范围段中可能会出现二进制相同的情况,因此用以判断相等不合适。后来,接触Python学习,发现很多系统中浮点精度有一个eps的定义,也就是最小精度。对于浮点判断,很多时候我们可以借助于是否达到了最小精度的一定倍数来用以区分控制的效果。这都是一些陈年旧事的回忆了,回想过去的成长,曲折中摔跟头前进,内心五味杂陈。
13.4, for循环的主要作用其实还是一个遍历穷举功能,类似的处理还是尽量用整形做控制。这里做的要求是不要使用浮点的类型,主要是为了防止出现截断类以及前面反复提到的数据精度不同区间的异常影响。
13.5, for循环的3个表达式只应该与逻辑控制相关。
讨巧的做法,在for的表达式的非循环体中也可以做一些处理操作,这样的处理应该不允许。更为简单粗暴的做法其实可以把for定义为一个SICP中提到的map行为实现工具,这样把逻辑跟动作完全解耦,出现的问题就会更少也会更容易避免问题。另外,故意设计无限循环也是可以的。
13.7,不能够出现结果一直不变的布尔量表达式。
其实,出现这样的情况一般是考虑不充分。真是出现了,意味着软件其实是有优化空间的。当然,更多时候可能是出现了bug。但是在汽车电子领域,有一种情况可能会跟这一条规则很不一致。那就是通过标定实现的功能禁用或者激活,其实这样的违规情况就可能是一个很庞大的规模了。
1212_MISRA_C规范学习笔记_控制表达式规则要求相关推荐
- 1211_MISRA_C规范学习笔记_表达式的要求
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking 12.1, 规则12.1(咨询):在表达式中,应该对C语言的运算符优先级规则有一定的限制. 关 ...
- MySQL学习笔记_上(select查询)
上次整理了一些练习发到博客上了,也说要发基础的,整理了一下午才算是把查询那块的勉强整理完,下次再整理其他的,另外还在写设计模式和数据结构的草稿,写的差不多会慢慢发的,这两项算是副线发展,主线还是按 ...
- CCC3.0学习笔记_数字密钥数据结构
CCC3.0学习笔记_数字密钥数据结构 系列文章目录 文章目录 系列文章目录 前言 4.1 Applet Instance Layout 4.2 Digital Key Structure 4.2.1 ...
- 人力资源之选人方法学习笔记_职位胜任素质模型
续接上篇:人力资源之选人方法学习笔记_建立科学的人才观 本篇主要讲解关于职位胜任素质模型课程的学习笔记. 什么是职位胜任素质模型 就是用行为方式来定义员工为了完成某项工作应该具备的知识.技能等特质 ...
- 8.Python基础学习笔记day8-正则表达式、网络编程、进程与线程
8.Python基础学习笔记day8-正则表达式.网络编程.进程与线程 一.正则表达式 ''' 1. [1,2,3,4]中任意取3个元素排列: A43 = 4x3x2 = 24itertools.pe ...
- MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...
- 系统架构师学习笔记_第六章(下)_连载
系统架构师学习笔记_第六章(下)_连载 6.3 基于 UML 的软件开发过程 6.3.1 开发过程概述 UML 是独立于软件开发过程的,能够在几乎任何一种软件开发过程中使用.迭代的渐进式软件开发过程 ...
- Java学习笔记——流程控制
Java学习笔记--流程控制 Day05 一.用户交互Scanner 1.Scanner对象 我们通过Java工具包java.util.Scanner中的Scanner类来获取用户的输入 基本语法:S ...
- 数字IC设计学习笔记_静态时序分析STA_ STA基本概念
数字IC设计学习笔记 STA基本概念 1. STA基本概念 2. 时序弧概念 Timing Arc 3. 建立时间和保持时间概念 4. 时序路径概念Timing Path 5. 时钟域概念clock ...
- 979_MISRA C规范学习笔记3
MISRA C规范学习笔记3 Grey 全部学习汇总: https://github.com/GreyZhang/misra_c_hacking MISRA C规范学习笔记3 文档学习 实际的实施中, ...
最新文章
- IOS 学习笔记 2015-03-20 O之 nil,Nil,NULL,NSNull
- ffmpeg遇到inttypes.h和UINT64_C
- 3、HTML导入外部样式表(HTML导入CSS文件)
- 声明 struct x1 { ...}; 和 typedef struct { ...} x2; 有什么不同?
- 《机器人自动化:建模、仿真与控制》——2.3 仿真
- java 鼠标精灵_纯Java实现跨平台鼠标键盘模拟、找图找色,Java版按键精灵
- jdbc 连接 mysql 的字符串
- ajax的原理和运行机制
- 佳能MP145/140打印机 出现错误代码“E5”怎么处理
- 「一本通 4.5 例 1」树的统计(树链剖分)
- 东北大学c语言作业答案,{东北大学}2018年秋学期《画法几何及土木建筑制图》在线作业2课后参考答案...
- CuteFTP实现windows和Fedora12数据共享
- 原创 C++应用程序在Windows下的编译、链接:第二部分COFF/PE文件结构
- ios dyld: Library not loaded: @rpath/xxx.framework/xxx 之根本原因
- 从0开始学大数据(十二)
- nginx域名反向代理
- 【无标题】阿里滑块 通过 x82y接口、dll、源码 返回x5sec,可解决!
- QLineEdit限制数字输入范围
- str开头的c语言函数介绍,C语言str函数系列
- Android 购物车UI及逻辑实现