鱼C论坛

 找回密码
 立即注册
查看: 4972|回复: 6

C语言volatile怎么用?请不要复制别人的作品,我网上找了很多了,没个解释好的

[复制链接]
发表于 2013-9-1 17:09:50 | 显示全部楼层 |阅读模式
5鱼币
本帖最后由 拈花小仙 于 2013-9-1 18:47 编辑

我初学者,还忘高手能解答小仙的疑惑

最佳答案

查看完整内容

没有玩嵌入式的话,不需要知道这个概念。 解释如下:比如在一个硬件系统中,通过某种方式将变量unsigned char btn;表示是8个开关的状态(每位表示1个开关,比如0表示打开,1表示关闭)。假设初始状态是0(就是说8个开关都打开)。如果btn不是volatile的,那么当你读取变量btn的时候,程序发现你本次读取和上次读取之间没有用程序改变变量btn的值,因此直接返回上次btn的值(但此时你可能用手改变了开关的状态)。在这种情况下,必 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-1 17:09:51 | 显示全部楼层
没有玩嵌入式的话,不需要知道这个概念。
解释如下:比如在一个硬件系统中,通过某种方式将变量unsigned char btn;表示是8个开关的状态(每位表示1个开关,比如0表示打开,1表示关闭)。假设初始状态是0(就是说8个开关都打开)。如果btn不是volatile的,那么当你读取变量btn的时候,程序发现你本次读取和上次读取之间没有用程序改变变量btn的值,因此直接返回上次btn的值(但此时你可能用手改变了开关的状态)。在这种情况下,必须将变量btn声明为volatile,这样,每次cpu必须读变量btn的值,而不会做之前的优化。因此volatile也表明了此变量受外部因素影响而变化。

评分

参与人数 1鱼币 +3 收起 理由
拈花小仙 + 3 版主万岁,您万能啊!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-1 19:40:31 | 显示全部楼层
我解释的肯定没有百度百科解释的好,就不献丑了。。。
你不理解只是因为你还没学那么深,或者没学到那个方向,等到需要用的时候自然就懂了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-1 19:42:16 | 显示全部楼层

有例题需要啊,可不讲解
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-1 21:42:33 | 显示全部楼层
拈花小仙 发表于 2013-9-1 19:42
有例题需要啊,可不讲解

没写过那么复杂的程序,那个嵌入式开发和多线程需要的多一点吧。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-2 14:35:49 | 显示全部楼层
既然你在网上看过那就不做过多的解释,
volatile 写在某一个变量前面,就是告诉编译器,不要对这个变量进行优化,
编译器会对一些代码进行优化处理这点你知道吧!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-2 17:22:29 | 显示全部楼层
用了这个关键字  编译器就会每次从内存里面取数据  而不是从cpu的缓存里  有可能cpu的缓存里面的数据没有更新  但是内存里面的的数据变化了  这就会造成程序出错

评分

参与人数 1鱼币 +1 收起 理由
Diu + 1 正解,懂了

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-6 01:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表