限定词const和volatile的使用
2016-09-27 23:11
246 查看
一 const的使用
限定词const在C语言中主要用来定义只读变量。只读变量一旦定义,值将不能被修改。
定义格式:
const 变量类型名 变量名 = 初始值;
或
变量类型名 const 变量名 = 初始值;
例如,
const int MAX_NUM = 10;
const double PI = 3.1415927;
MAX_NUM, PI只读变量定义后, 不能被修改。在C语言中,为了区分开变量, 通常对于const定义的变量名
都采用大写字母表示。这个与java中定义常量含义一样,都用大写字母表示变量名。
一般情况下,const有4个好处。
(1) 提高程序的可读性
比如说计算半径为2的圆面积,s = 3.1415927 * 2 * 2,一般对于不知道圆面积公式或圆周率的朋友,
对于这个计算会一头雾水,完全不知道3.1415927是个啥东西。在C语言中,可以将这串数字定义
为一个只读变量,在程序使用中用变量表示。
eg:
在程序中应用的地方直接引用变量即可。
(2) 提高程序的可维护性
比如上面的PI定义为7位小数,需求只要改改,让你变成2位小数,只需把PI的初始值改为3.14即可,
如果是每个用到PI的地方,都是用3.1415927,如果需要修改,则所有的地方都需要去修改,维护困难。
(3) 防止变量值被意外的修改
比如,
const double PI = 3.1415927;
......
PI = 3.14;
我们尝试将只读变量的初始值改为3.14,编译器会发出警告,不让重新用=号赋值。
eg:
(4) 提高程序运行效率
对于const定义的只读变量,编译器一般不会为其分配内存,只是将值保存在符号表中,
程序运行时不需要进行读写内存操作,从而提高程序运行效率。
二 volatile的使用
volatile的英文意思为'易变的',在C语言中作为限定词的volatile告诉编译器通过volatile定义的变量
随时在改变,编译器优化时必须重新读取这个变量的值,不能使用保存在寄存器里的备份值,否则,
容易出现误差。所以一般使用volatile定义的变量是禁止编译器去优化该变量的,通过这种定义方式
可以告诉编译器,这个变量时刻被改变,数值可能在编译器监测不到的情况下去改变量,这个时候
如果允许编译器去优化变量,很容易出错,特别是多线程环境下。
定义格式:
volatile 数据类型名 变量名;
或
数据类型名 volatile 变量名;
同时可以将const于colatile一起使用,
const volatile int data = 12;
这句话的含义是数据data内存空间的内容可能随时被改变,但是变量的值data的值不会改变。
三 总结
(1)const定义只读变量
(2)volidate定义的变量编译器不作优化
限定词const在C语言中主要用来定义只读变量。只读变量一旦定义,值将不能被修改。
定义格式:
const 变量类型名 变量名 = 初始值;
或
变量类型名 const 变量名 = 初始值;
例如,
const int MAX_NUM = 10;
const double PI = 3.1415927;
MAX_NUM, PI只读变量定义后, 不能被修改。在C语言中,为了区分开变量, 通常对于const定义的变量名
都采用大写字母表示。这个与java中定义常量含义一样,都用大写字母表示变量名。
一般情况下,const有4个好处。
(1) 提高程序的可读性
比如说计算半径为2的圆面积,s = 3.1415927 * 2 * 2,一般对于不知道圆面积公式或圆周率的朋友,
对于这个计算会一头雾水,完全不知道3.1415927是个啥东西。在C语言中,可以将这串数字定义
为一个只读变量,在程序使用中用变量表示。
eg:
#include "stdio.h" int main(void) { /* 常量定义语法格式: const 数据类型 变量名 = 初始值 */ const double PI = 3.1415927;/* 精确7位的圆周率 */ double s;/* 定义一个普通变量s表示圆面积 */ /* 圆面积公式: s = PI*r*r,其中PI为圆周率,r为半径, */ s = PI*2*2;/* 计算圆的面积 */ printf("s = %f\n", s);/* 通过printf方法将圆面积输出 */ return 0; }在以上程序中,程序可读性相对得到保证,因为PI是可以不变的变量,
在程序中应用的地方直接引用变量即可。
(2) 提高程序的可维护性
比如上面的PI定义为7位小数,需求只要改改,让你变成2位小数,只需把PI的初始值改为3.14即可,
如果是每个用到PI的地方,都是用3.1415927,如果需要修改,则所有的地方都需要去修改,维护困难。
(3) 防止变量值被意外的修改
比如,
const double PI = 3.1415927;
......
PI = 3.14;
我们尝试将只读变量的初始值改为3.14,编译器会发出警告,不让重新用=号赋值。
eg:
#include "stdio.h" int main(void) { const double PI = 3.1415927;/* 精确7位的圆周率 */ PI = 3.14;/* 尝试重新给PI赋值,编译时编译器将发出警告 */ return 0; }
(4) 提高程序运行效率
对于const定义的只读变量,编译器一般不会为其分配内存,只是将值保存在符号表中,
程序运行时不需要进行读写内存操作,从而提高程序运行效率。
二 volatile的使用
volatile的英文意思为'易变的',在C语言中作为限定词的volatile告诉编译器通过volatile定义的变量
随时在改变,编译器优化时必须重新读取这个变量的值,不能使用保存在寄存器里的备份值,否则,
容易出现误差。所以一般使用volatile定义的变量是禁止编译器去优化该变量的,通过这种定义方式
可以告诉编译器,这个变量时刻被改变,数值可能在编译器监测不到的情况下去改变量,这个时候
如果允许编译器去优化变量,很容易出错,特别是多线程环境下。
定义格式:
volatile 数据类型名 变量名;
或
数据类型名 volatile 变量名;
同时可以将const于colatile一起使用,
const volatile int data = 12;
这句话的含义是数据data内存空间的内容可能随时被改变,但是变量的值data的值不会改变。
三 总结
(1)const定义只读变量
(2)volidate定义的变量编译器不作优化
相关文章推荐
- const volatile的使用
- C/C++中 const,extern,static,volatile的使用
- const与volatile的使用方法
- dynamic_cast: 通常在基类和派生类之间转换时使用,run-time cast const_cast: 主要针对const和volatile的转换. static_cast: 一般的转换
- C/C++中 const,extern,static,volatile的使用(转帖)
- 关键字Const与Volatile的使用
- [Keyword]static/const/volatile/intterupt的使用及注意
- C语言中volatile和const在一起使用注意之处
- 转:关键字Const和Volatile的使用
- C/C++中 const,extern,static,volatile的使用 200
- C/C++中 const,extern,static,volatile的使用(转帖)
- C语言中const、volatile、restrict等类型限定符的区别
- 关键字Const与Volatile的使用
- const 限定符部分使用
- C++对指针使用const 限定符
- (转)C/C++中 const,extern,static,volatile的使用
- C/C++中 const,extern,static,volatile的使用
- Return to the Basic - 限定符: const和volatile.
- C语言中的const,volatile与restrict的使用
- const, static, extern,volatile 的使用