const和volatile一起定义是什么意思?

Quain 2004-04-14 01:56:37
最近看到一个头文件里定义了这样的东西
tpyedef const volatile unsighed short UC16
const 不是告诉编译器该变量不可在运行中改变吗,那么为什么还要加上volatile呢?

...全文
59 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Quain 2004-04-14
  • 打赏
  • 举报
回复
正确的说法是:“const只是编译器限制变量在软件条件下不可改变,但是没有考虑到硬件的因素,也就是说const变量可能由于硬件的改变而改变,所以在const和volatile一起定义时候,可以保证不可预计的任何错误。”
分数还是要给大家的,谢谢大家。
qhgary 2004-04-14
  • 打赏
  • 举报
回复
As the above, "const volatile unsigned short *addr" doesn't mean addr can't be modified during the program but means that the contents of addr(*addr) cant't be
changed. As a result, put "volatile" in front of "unsigned short *addr" is OK, that's only to tell compiler not to save the value of "addr" in the register since it may be changed in another place, and it of course can be changed.
freefalcon 2004-04-14
  • 打赏
  • 举报
回复
前几天有人在c语言版问过这个问题
const是限制自己修改变量, volatile是禁止编译器对变量进行优化
happlyman 2004-04-14
  • 打赏
  • 举报
回复
楼上的说法很对,赞同!!!
angelo23 2004-04-14
  • 打赏
  • 举报
回复
“volatile修饰符的主要目的是提示编译器,该对象的值可能在编译器未检测到的情况下被改变。因此编译器不能武断的对引用这些对象的代码作优化处理。”
junnyfeng 2004-04-14
  • 打赏
  • 举报
回复
意思是指改变量只由外部条件修改(系统或外部程序)

避免在本程序中被修改
柯本 2004-04-14
  • 打赏
  • 举报
回复
typedef const volatile unsigned short UC16;
单片机开发时,可这样用
UC16 *addr=(UC16 *)addr;
addr 可能会在程序的其它地方改变,但addr中的内容(*addr)不能改变
yjh1982 2004-04-14
  • 打赏
  • 举报
回复
volatile说,但别人可以改变.
所以读该数据时不会缓冲到寄存器中
Quain 2004-04-14
  • 打赏
  • 举报
回复
对不起,笔误把typedef 打成了tpyedef,另外这是用在单片机上的嵌入式编程

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧