1210_MISRA_C规范学习笔记_指针使用的规范性
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking
这一次,把整个指针相关的这个章节一起看一下。
指针的类型:指向某个对象、指向一个函数、指向void、NULL类型。
指针类型转换,允许的隐式转换有:指向对象的与指向void的转换、NULL与其他的类型之间的转换。
11.1,这一条要求很简单,函数指针不能够与整形指针以外的其他的类型的指针进行转换。如果这一条不遵守,可能会导致一些未定义的行为发生。
11.2,指向对象的指针,可以进行转换的类型有:另一个同类指针、整形指针、void型指针。
11.3,这个并不是一个强制的规则要求。主要是针对指针类型和整形之间的转换,注意后面是一个整形而不是整形指针。由于嵌入式中有很多寄存器的访问,直接根据寄存器的地址来处理,因此这样的操作是不可避免的。这里的建议,主要是考虑到了这一点。不过针对其他的操作,应该尽量不要用这种方式处理。
11.4,指向不同类型对象的指针之间不能够进行相互转换,比如一个指向8bit无符号,而另一个则指向16bit无符号,两者不能够互转。这个其实是很容易理解的,涉及到多个方面:第一个是数据占用的存储范围不同;第二个是可能是完全不同的数据概念。
11.5, 转换的时候const以及volatile等修饰不能够移除。这个很容易理解,尤其是针对const的理解更加简单。原本这个就是一个只读的信息,如果是转换的时候去掉了const那么从操作概念上就变成了可写。这个从系统设计的角度来讲是说不过去的。从另一个角度来思考解读,虽然这些信息是不能够移除的,但是没有说明是不可以增加的,因此如果是增加的话可能会另做考虑。
上面是几个合规以及不合规的例子。
其实,指针的理解看上去复杂其实解读起来还是容易的。不同于前面看到的基础数据类型的转换,更多是在定义最原始的规则,指针的操作已经到了实际功能解读的层面上了。而判断实际对象之间的匹配度,其实还是很容易的。
1210_MISRA_C规范学习笔记_指针使用的规范性相关推荐
- 1211_MISRA_C规范学习笔记_表达式的要求
全部学习汇总: https://github.com/GreyZhang/misra_c_hacking 12.1, 规则12.1(咨询):在表达式中,应该对C语言的运算符优先级规则有一定的限制. 关 ...
- Go学习笔记_环境搭建
Go学习笔记_环境搭建 Go背景知识 go的特点(官网): Build fast, reliable, and efficient software at scale- Go is an open s ...
- 人力资源之选人方法学习笔记_职位胜任素质模型
续接上篇:人力资源之选人方法学习笔记_建立科学的人才观 本篇主要讲解关于职位胜任素质模型课程的学习笔记. 什么是职位胜任素质模型 就是用行为方式来定义员工为了完成某项工作应该具备的知识.技能等特质 ...
- CCC3.0学习笔记_数字密钥数据结构
CCC3.0学习笔记_数字密钥数据结构 系列文章目录 文章目录 系列文章目录 前言 4.1 Applet Instance Layout 4.2 Digital Key Structure 4.2.1 ...
- CCC3.0学习笔记_证书数据
CCC3.0学习笔记_证书数据 系列文章目录 文章目录 系列文章目录 前言 1. [A] - SE Root CA Certificate 2. [B] - SE Root Certificate 3 ...
- MySQL学习笔记_上(select查询)
上次整理了一些练习发到博客上了,也说要发基础的,整理了一下午才算是把查询那块的勉强整理完,下次再整理其他的,另外还在写设计模式和数据结构的草稿,写的差不多会慢慢发的,这两项算是副线发展,主线还是按 ...
- 梓益C语言学习笔记之指针
梓益C语言学习笔记之指针 一.32位平台下,地址是32位,所以指针变量占32位,共4个字节 二.内存单元的地址即为指针,存放指针的变量称为指针变量,故:"指针"是指地址,是常量,& ...
- oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组
ASM学习笔记_配置ASMLIB磁盘组 目录 1 ASMLIB Introduction 2 虚拟机添加一个共享磁盘(块设备) 3 下载,安装ASMLIB 4 配置,使用ASMLib 磁盘组 #### ...
- MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...
- 系统架构师学习笔记_第六章(下)_连载
系统架构师学习笔记_第六章(下)_连载 6.3 基于 UML 的软件开发过程 6.3.1 开发过程概述 UML 是独立于软件开发过程的,能够在几乎任何一种软件开发过程中使用.迭代的渐进式软件开发过程 ...
最新文章
- Python实现微信防撤回
- 前端入门 前端自学路线 web开发前端如何学习
- 编程方法学7:循环与一半
- 单点登录的原理与CAS技术的研究
- 网络工程师交换试验手册之十八:SWITCH的基本配置
- php里面的 n算是,用PHP中的bcmath计算第N个根
- Java笔记-Log4j在Spring Boot中的使用
- io.circe_如何使用Circe(Un)在Akka HTTP中封送JSON
- 【推荐实践】模型化召回在陌陌社交推荐的探索和应用.pdf(附下载链接)
- 显示所有大写字母python_python 输出所有大小写字母的方法
- html 日期区间选择器,element日期范围选择器
- Android多开框架优化游戏防闪思路
- 计算机音乐怎么调音速,音频实现变声?学会使用Studio One改变音速
- Pytorch基础学习(第一章-PyTorch基础概念)
- 什么是 GPU 加速的计算?
- docker搭建zabbix服务
- 后台管理----首页布局分析1
- Web性能测试基本性能指标及案例分析
- 如何在本地进行一个IP访问多个域名
- 银行信用风险预测分析