volatile与const综合分析】的更多相关文章

在C/C++ 编程中,volatile与const关键字一向容易让人困惑,当然,新手可能从来不用,但是 在高质量和稳健的程序中,这两个关键字 是相当重要的. 相比const,volatile关键字的发展(变化)较少,从C到C++的演变中,一直保持着 它的语义,因此,我们先从volatile来了解下,这两个关键字 一.volatile 1.volatile 的基础 认知: volatile 的英文 释义是 容易 挥发的, 作为 关键字,可以 记忆为 它修饰的 变量 是 不稳定的,可能被其他地方的某…
volatile可理解为“编译器警告指示字” volatile用于告诉编译器必须每次去内存中取变量值 volatile主要修饰可能被多个线程访问的变量 volatile也可以修饰可能被未知因数更改的变量 const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心:(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化. “const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”.“…
一.volatile定义: 一个定义为volatile的变量是说这变量可能会被意想不到的被改变,这样,有了volatile变量后,就提醒编译器就不会去假设这个变量的值了.精确地说就是,编译中的优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份. eg: 1.硬件设备的寄存器(如:状态寄存器) #define GPFCON (*(volatile unsigned long *)0x56000050) 2.一个中断服务子程序中会访问到的非自动变量(Non-a…
C语言作为一门古老的语言,其灵活性和容易出错都让人 又爱又恨,书籍<你必须知道的495个C语言问题>,使用问答的形式,告诉读者 C语言使用的各个方面的知识,包括一些冷知识等.以下,我要摘录和整理些 ,我认为比较重要的知识进行分享. 知识 一:声明,定义与初始化 1.关于int与long,众所周知,C语言标准没有规定标准类型的大小,特别是对于int类型,在甚多16位的机器上看,int类型其实是16位的,而到了32位机器上,int就是32位的了,实际上,int类型代表了机器的自然字长,这是多整形变…
问题: const volatile int i=10:这行代码有没有问题?如果没有,那 i 到底是什么属性? 回答: 没有问题,例如只读的状态寄存器.它是volatile,因为它可能被意想不到地改变:它是const,因为程序不应该试图去修改它. volatile和const并不矛盾,只是控制的范围不一样,一个在程序本身之外,另一个是程序本身. const表示(运行时)常量语义:被const修饰的对象在所在的作用域无法进行修改操作,编译器对于试图直接修改const对象的表达式会产生编译错误. v…
const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心: (2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化. "const"含义是"请做为常量使用",而并非"放心吧,那肯定是个常量". "volatile"的含义是"请不要做没谱的优化,这个值可能变掉的",而并非"你可以修改这个值&quo…
第一眼见到explicit和volatile可能会一愣一愣的觉得可能是c11或者c14新加的标识符. 其实不是这样,volatile和const两个关键字在C语言的第二个版本KR C的时候就被加入了C标准,他们是两个相对的关键字 const 修饰符表示这是一个常量类型,这个变量的值不会被程序改变 volatile 修饰符表示这个变量可能被编译器以外的行为(譬如内联汇编程序)改变. 修饰常量变量只要和类型紧挨着就可以 ; ; 修饰指针时以*号为分界符号 #include <iostream> #…
这是ST库里面的宏定义,定义如下: #define __I volatile const /*!< defines 'read only' permissions */ #define __O volatile /*!< defines 'write only' permissions */ #define __IO volatile /*!< defines 'read / write' permissions */ 显然,这三个宏定义都是用来替换成 volatile 和 const…
1. 为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier.这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明: A volatile specifier is a hint to a compiler that an object may change its value in ways not specified b…
      一.意义: 该关键字的意义就是表示定义的变量值随时都会改变,必须从变量的地址处读取值,所以只有这个变量在使用过程中可能被改变(比如中断程序),就需要用这个关键字说明. )volatile,关键字volatile 确保本条指令不会因C 编译器的优化而被省略,且要求每次直接读值. )共享的内存地址,多个程序都对它操作的时候.你的程序并不知道,这个内存何时被改变了.如果不加这个voliatile修饰,程序是利用catch当中的数据,那个可能是过时的了,加了 voliatile,就在需要用的…