16-7-12笔记
来源:互联网 发布:电脑淘宝怎么上货 编辑:程序博客网 时间:2024/06/18 12:30
1.volatitle关键字作用 7-12
举例说明:
volatile int i=10;
int j = i;
...
int k = i;
volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。
volatile 影响编译器编译的结果,指出,volatile变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。
其中编译器编译优化是:
由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。
2.volatitle const关键字
现在讨论一个深奥的问题,一个变量既能是常量,又能是可变量吗?如果是这样,这意
味什么,怎样使用?答案是“能”。
这个修饰符应该用于能出乎意料地改变的任何存贮器位置,因此需要volatile限定语,
由于const该变量是只读的。
最明显的例子是硬件状态寄存器,象SCI状态寄存器SCS1。这个寄存器包含信号状态标志,
如发送空、发送完成、接收满以及其它。这是一个可变寄存器由于这些标志的改变依赖于串行
通信的状态,这也是只读,由于标志不能被程序直接改写,它们只对模块的状态作出响应。
这个状态寄存器最佳声明方法是:
const volatile unsigned char SCS1 @0x0016
3.typedef enum {FALSE=0,TRUE=!0} bool;
声明了一个枚举类型一般形式为:enum [枚举名] {枚举元素列表};也可以声明没有枚举名的枚举类型,就是像你给的那种,后边的bool是枚举类型的变量,可以对其进行赋值,不过只能用FALSE或者TRUE进行赋值。
- 16-7-12笔记
- 【笔记】13/7/16
- 7-16 java学习笔记
- 2013-7-12学习笔记
- 笔记16
- 笔记12
- 笔记12
- 笔记12
- 笔记7
- 笔记7
- 笔记7
- 笔记7
- 笔记7
- [笔记] 传智播客-javaWeb笔记(7)
- python 学习笔记 12/16/14
- java日常笔记2016-12-16
- 《Effective Java》(12~16)阅读笔记
- 2010-7-16 Linux 的 Makefile 笔记
- TCP连接断开过程-四次握手
- 设计模式——适配器模式
- javaweb学习总结(八)——HttpServletResponse对象(二)
- JSON.parse()和JSON.stringify()
- 禁止ScrollView在子控件的布局改变时自动滚动的的方法
- 16-7-12笔记
- Linux shell自动监控tomcat宕机重启
- Eclipse查看jar包源码的方法
- 求几个(数)中有无相同(数)的应用
- 升级到iOS9.3.3越狱实践和感受
- [转]如何使用python修改注册表
- ElasticSearch跨域查询(多词搜索)
- 研读:CaSE Cache-Assisted Secure Execution on ARM Processors
- JVM的内存管理和垃圾回收