| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 771 人关注过本帖
标题:关于volatile的小困惑,
只看楼主 加入收藏
善ing
Rank: 2
来 自:华东师范
等 级:论坛游民
帖 子:34
专家分:19
注 册:2012-11-18
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:12 
关于volatile的小困惑,
今天看书时看到以下思考题:
const volatile int i = 10;
// 此代码有问题吗?
//如果没有,那么i 是什么属性?
实在是困惑,麻烦各位抽几分钟指教在下。
搜索更多相关主题的帖子: 思考题 困惑 
2012-12-29 20:53
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
volatile 是什么意思

                                         
===========深入<----------------->浅出============
2012-12-29 20:54
善ing
Rank: 2
来 自:华东师范
等 级:论坛游民
帖 子:34
专家分:19
注 册:2012-11-18
收藏
得分:0 
volatile为易变,const为只读。
然后就解释不通了。。。。

邂逅c  (⊙o⊙)
2012-12-29 21:26
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:4 
volatile的语义是易挥发的,不稳定的,用它修饰的变量时提醒编译器在每次使用此变量时都要对此变量进行检查以保持其值不变,const是声明此变量为只读(也有的说是将其声明为常量,但我认为这样并不准确),这两个关键字并不冲突,和在一起我认为表示这个int型的变量i为只读(表现为常量),且提醒编译器注意保护此变量。
关于volatile的介绍我忘了在哪本书上看到的了(哎,都看杂了),手边的翻了半天也没找到,说以只当参考,以防说错

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-29 21:39
善ing
Rank: 2
来 自:华东师范
等 级:论坛游民
帖 子:34
专家分:19
注 册:2012-11-18
收藏
得分:0 
感觉有理,,再看看别人的意见,学习学习。

邂逅c  (⊙o⊙)
2012-12-29 21:50
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:2 
可以用于确保在内存中有一个常数?

这个关键字 我知道的一个功能是防止编译器优化出问题 不知道这里有啥深刻含义
2012-12-29 22:24
wfoo
Rank: 3Rank: 3
等 级:论坛游侠
威 望:7
帖 子:120
专家分:134
注 册:2011-8-6
收藏
得分:4 
const volatile int i = 10;
这样定义一般是没有意义的,volatile 一般用做函数的参数以防止编译器的优化而引起错误。
如 foo (volatile int *);  或者是这样
  #define REG   (*(volatile int *)0x20e00000)
  while ((1 & REG))
    {}
2012-12-29 22:37
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
版主我可没说他保存常数,我只是说他被初始化后便确保不会被改变,他是不是常量我还真说不好,当向他赋值时系统的提示是“表达式必须是可修改的左值左值”,这与常量赋值(比如1=5;)的报错信息是一样的。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-12-29 22:41
冰冻零点
Rank: 3Rank: 3
来 自:西安电子科技大学
等 级:论坛游侠
帖 子:81
专家分:136
注 册:2012-9-18
收藏
得分:3 
一个值可以同时是const和volatile,例如,硬件时钟一般设定为不能由程序改变,这一点使它成为const;但它被程序以外的代理改变,这使它成为volatile的.只需在声明中同时使用这两个限定词,如下所示;顺序并不重要:volatileconstintloc;

复制于c primer plus中文第五版12.7.2节

好好学习,天天向上
2012-12-29 22:46
善ing
Rank: 2
来 自:华东师范
等 级:论坛游民
帖 子:34
专家分:19
注 册:2012-11-18
收藏
得分:0 
防止编译器优化出错,
难道是用在制作编译器时?
尽管不太懂,还是谢谢各位。
顺便回第9楼,我也在看C Primer Plus,不过还没看到那

邂逅c  (⊙o⊙)
2012-12-29 22:53
快速回复:关于volatile的小困惑,
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031504 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved