【每日一C之十一】C语言volatile

本文介绍了C语言中的volatile关键字,解释了其如何防止编译器优化可能导致的错误,并给出了实际应用场景,如中断程序和多线程程序中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每日一C之volatile

       每天一个C语言贝壳厚积薄发积跬步以致千里

 今日贝壳:C语言volatile用于避免因编译器优化导致的错误
            CPU访问内存的速度远快于访问设备地址,访问寄存器速度又快于内存,为了提高程序的运行速度,编译器会对程序进行优化。如:
            buffer=Read(0xEE);    //读取0xEE端口数据,存入a
            a=buffer;
            buffer=Read(0xEE);    //读取0xEE端口数据,存入b
            b=buffer; 
编译器可能会优化成:
            buffer=Read(0xEE);
            a=buffer; 
            b=buffer;                      //此次优化能减少一次设备访问
     问题:如果0xEE端口内容实时更新,此次优化将会违背程序的初衷, volatile则用于解决此问题,提示编译器不要对此变量进行优化,从而保证实时性。用法如下:
           volatile buffer=Read(0xEE);
     使用场合:volatile用于修饰可能被外界中断修改的变量,或其他线程修改的变量等。
                             1.中断程序
                             2.多线程程序
等程序设计中常会使用到volatile。
                    Have a nice day !

           
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值