没有合适的资源?快使用搜索试试~ 我知道了~
C语言学习之volatile关键字.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 123 浏览量
2022-02-10
00:49:59
上传
评论
收藏 20KB PDF 举报
温馨提示
试读
2页
C语言学习之volatile关键字.pdf
资源推荐
资源详情
资源评论
volatile 的作 用是 作为 指令 关键 字,确 保本 条指 令不 会因 编 译器 的
优化 而省 略, 且要 求 每次 直接 读值 。
简单 地说 就是 防止 编 译器 对代 码进 行优 化 。比 如如 下程 序:
XBYTE[2]=0x55;
XBYTE[2]=0x56;
XBYTE[2]=0x57;
XBYTE[2]=0x58;
对外 部硬 件而 言,上 述四 条语 句分 别表 示 不同 的操 作,会 产生 四种
不 同 的 动 作 , 但 是 编 译 器 却 会 对 上 述 四 条 语 句 进 行 优 化 , 认 为 只 有
XBYTE[2]=0x58 ( 即 忽略 前三 条语 句,只 产生 一条 机器 代码 )。如 果键 入
volatile ,则编 译器 会逐 一地 进行 编译 并 产生 相应 的机 器代 码(产生 四
条代 码) 。
精确 地说 就是 ,优 化 器在 用到 这个 变量 时 必须 每次 都小 心地 重 新读
取这 个变 量的 值,而 不是 使用 保存 在寄 存 器里 的备 份。下 面是 volatile
变量 的几 个例 子:
1)并 行设 备的 硬件 寄存 器( 如: 状态 寄 存器 )
2)一 个中 断服 务子 程序 中会 访问 到的 非 自动 变量
3)多 线程 应用 中被 几个 任务 共享 的变 量
请看 下面 几个 问题 :
1)一 个参 数既 可以 是 const 还可 以是 volatile 吗 ?解 释为 什么 。
2)一 个指 针可 以是 volatile 吗 ?解 释 为什 么。
3)下 面的 函数 有什 么错 误:
int square(volatile int *ptr)
{
return ((*ptr) * (*ptr));
}
下面 是答 案:
1)是 的 。一 个例 子 是只 读的 状态 寄存 器 。它 是 volatile 因 为它 可能 被
意想 不到 地改 变。 它 是 const 因为 程序 不 应该 试图 去修 改它 。
2)是的 。尽管 这并 不 很常 见 。一个 例子 是 当一 个中 断服 务子 程 序修 改一
个指 向一 个 buffer 的指 针时 。
3)这 段代 码是 个恶 作剧 。这 段代 码的 目 的是 用来 返指 针 *ptr 指向值 的
平方 ,但 是, 由于 *ptr 指向 一个 volatile 型参数 ,编 译器 将 产生 类似
下面 的代 码:
int square(volatile int* &ptr)// 这里参数应该申明为引用,不然函
数体里只会使用副本,外部没法更改
{
int a,b;
资源评论
pingtouxiaoge
- 粉丝: 0
- 资源: 9万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功