volatile关键字加在函数前面有什么用

Code研究者 2012-10-18 05:08:07
volatile void f()与void f()有什么区别?
...全文
505 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-10-19
  • 打赏
  • 举报
回复
volatile
volatile declarator

The volatile keyword is a type qualifier used to declare that an object can be modified in the program by something other than statements, such as the operating system, the hardware, or a concurrently executing thread.

The following example declares a volatile integer nVint whose value can be modified by external processes:

int volatile nVint;
Objects declared as volatile are not used in optimizations because their value can change at any time. The system always reads the current value of a volatile object at the point it is requested, even if the previous instruction asked for a value from the same object. Also, the value of the object is written immediately on assignment.

One use of the volatile qualifier is to provide access to memory locations used by asynchronous processes such as interrupt handlers.

For related information, see const.
AnYidan 2012-10-19
  • 打赏
  • 举报
回复
volatile 主要是告诉 compiler 不要优化 它修饰的变量, 因为此变量可能发生 compiler 不知道的改变,每次对它的值的引用不要利用上一次存储的
sno_guo 2012-10-19
  • 打赏
  • 举报
回复
我感觉在编译的时候,应该是一样的,但是我很多时候用来定义一个变量,说明让编译器在优化的时候,不要优化或说明当前这个变量是“易变的” 不让他优化掉,

用来修饰一个函数,难道也是这样?
求解?
hzy694358 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

To hzy694358
你反汇编一下,这两个汇编代码是一样的,为什么要加volatile呢
[/Quote]
没看过反汇编代码,上面的只是volatile的概念性定义

不过这是不是跟编译器有关呢???
mujiok2003 2012-10-18
  • 打赏
  • 举报
回复
类型不一样:

void f();
volatile void ff();

void (*p)() = &f; //ok
p = &ff; //error, type mismatch

volatile void (*pp)() = &ff; //ok
pp = &f; //error, type mismatch
Code研究者 2012-10-18
  • 打赏
  • 举报
回复
To hzy694358
你反汇编一下,这两个汇编代码是一样的,为什么要加volatile呢
Code研究者 2012-10-18
  • 打赏
  • 举报
回复
你反汇编一下,这两个汇编代码是一样的,为什么要加volatile呢
hzy694358 2012-10-18
  • 打赏
  • 举报
回复 1
volatile修饰不返回函数,比如函数体里面有exit或者死循环之类的东西。
这样该函数被调用的时候不用把返回地址压入堆栈,(当然还可能有其他),代码得到优化

volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化
IVERS0N 2012-10-18
  • 打赏
  • 举报
回复
没区别

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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