C51BBS论坛>>C51编程:请问大家Volatile和const类型的变量在程序中究竟有何特殊的用处
C51编程:请问大家Volatile和const类型的变量在程序中究竟有何特殊的用处 [zhangzhangjie] 2008-5-12 10:56:29
- const是常量,不是变量;volatile是用来防止优化 [qllaoda] 2008-5-12 11:09:32
volatile用于防止相关变量被优化。 例如对外部寄存器的读写。对有些外部设备的寄存器来说,读写操作可能都会引发一定硬 件操作,但是如果不加volatile,编译器会把这些寄存器作为普通变量处理,例如连续多 次的对同一地址写入,会被优化为只有最后一次的写入。实际上,网卡的数据发送,就是 按顺序连续往一个同地址写入数据,如果被优化,网卡将不能正常驱动。 对于外部寄存器的读写,经常用 XBYTE,其实你看一下XBYTE的原型就知道了,里面也是有 个volatile的。 另一个使用场合是中断。 如果一个全局变量,在中断函数和普通函数里都用到过,那最好对这个变量加volatile修 饰。否则普通函数里,可能会仅从寄存器里读取这个变量以便加快速度,而不去实际地址 读取该变量。
- 可以用#define来定义一个常量啊,为什么还需要const呢? [zhangzhangjie] 2008-5-12 11:22:15
- 准确地说,#define定义的只是一个符号 [qllaoda] 2008-5-12 11:24:07
当然,大多数情况下,常量都可以用define来定义
- const说明变量存放的位置在代码区 [gz_zhmj] 2008-5-12 11:27:39
所以只能读,不能写。可以看成常量。 而#define定义的常量并不存在,编译器将它直接代替代码中的指明的地方,这样程序的可 读性高。
- 那就是说比较重要的变量应该加上volatile吧?或者我不选择优化呢 [zhangzhangjie] 2008-5-12 11:42:06
- 这个优化选项可能是你无法选择的 [三星光棱] 2008-5-15 18:07:18
所以,某些场合还是要加的。但并不是重要的变量就加。
|