打印
[经验分享]

C语言的关键字“volatile"有何作用?

[复制链接]
336|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rosemoore|  楼主 | 2023-8-20 13:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,改变量的值任可能会被外界修改。操作系统,硬件,或其他线程都有可能修改该变量。该变量的值有可能遭受意料之外的修改,因此,每一次使用时,编译器都会重新从内存中获取这个值。

volatile(易变)的整数可由下面的语句声明:

int volatile x;

volatlie int x;

要声明指向volatile整数的指针,可以这么做:

volatile int* x;

int volatile *x;

指向非volatile数据的volatile指针很少见,但也是可行的。

int * volatile x;

如若声明执行指向一块volatile内存的volatile指针变量(指针本身与地址所指的内存都是volatile),做法如下:

   int volatile *volatile x;

volatile变量不会被优化掉,这非常有用。设想有下面这个函数:

    int opt=1;

   void Fn(void){

         start:

               if (opt==1) goto start;

                    else break;

}

咋一看,上面的代码好像会进入无限循环,编译器可能会将这段代码优化成:

       void Fn(void)

      {

              start:

                   int  opt=1;

                   if(true)

                         goto start;

                   }  


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

1324

帖子

2

粉丝