C语言:volatile

#ifdef __cplusplus
  #define     __I     volatile               
/*!< defines 'read only' permissions      */
#else
  #define     __I     volatile const       
/*!< defines 'read only' permissions      */
#endif
#define     __O     volatile                
/*!< defines 'write only' permissions     */
#define     __IO    volatile                
/*!< defines 'read / write' permissions   */

上面的代码中使用到了volatile这个关键字。其作用是:不让编译器进行优化 ,即每次读取或者修改值的时候 ,都必须重新从内存或者寄存器中读取 或者修改。

typedef unsigned int u8;
int main(){

    u8 test;
    test = 1;
    test = 2;
    test = 3;
    return 0;
}

如上,设置优化级别中级,运行后test会被直接取值为3 只有最后一个语句被编译。什么情况下会出问题呢?
当输入或者输出同一个值时,就可能因为优化而被忽略
运行后test会被直接取值为3 只有最后一个语句被编译,这对于单片机控制而言是很糟的,所以要加volatile

typedef unsigned int u8;
int main(){

    volatile u8 test;
    test = 1;
    test = 2;
    test = 3;
    return 0;
}
posted @ 2020-11-20 09:41  ShadowEast  阅读(137)  评论(0)    收藏  举报