define宏定义和const常变量区别
2015-12-28 14:11
162 查看
1.define是宏定义,程序在预处理阶段将用define定义的内容进行了替换。因此程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
const定义的常量,在程序运行时在常量表中,系统为它分配内存。
2.define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。
const定义的常量,在编译时进行严格的类型检验,可以避免出错。
3.define定义表达式时要注意“边缘效应”,例如如下定义:
#define N 2+3 //我们预想的N值是5,我们这样使用N
int a = N/2; //我们预想的a的值是2.5,可实际上a的值是3.5
原因在于在预处理阶段,编译器将 a = N/2处理成了 a = 2+3/2;这就是宏定义的字符串替换的“边缘效应”因此要如下定义:
#define N (2+3)
const定义表达式没有上述问题。
const定义的常量叫做常变量原因有二:
const定义常量像变量一样检查类型
const可以在任何地方定义常量,编译器对它的处理过程与变量相似,只是分配内存的地方不同
const定义的常量,在程序运行时在常量表中,系统为它分配内存。
2.define定义的常量,预处理时只是直接进行了替换。所以编译时不能进行数据类型检验。
const定义的常量,在编译时进行严格的类型检验,可以避免出错。
3.define定义表达式时要注意“边缘效应”,例如如下定义:
#define N 2+3 //我们预想的N值是5,我们这样使用N
int a = N/2; //我们预想的a的值是2.5,可实际上a的值是3.5
原因在于在预处理阶段,编译器将 a = N/2处理成了 a = 2+3/2;这就是宏定义的字符串替换的“边缘效应”因此要如下定义:
#define N (2+3)
const定义表达式没有上述问题。
const定义的常量叫做常变量原因有二:
const定义常量像变量一样检查类型
const可以在任何地方定义常量,编译器对它的处理过程与变量相似,只是分配内存的地方不同
相关文章推荐
- EF for Mysql
- 解决“listView点击一个Item,另外几个Item也跟着改变”的问题
- 服务器可靠性指标
- Oracle中用exp/imp命令参数详解
- service和Thread的区别
- Android内存泄漏定位与解决
- Yii实现单用户博客系统文章详情页插入评论表单的方法
- 将input type="file" 类型的图片文件转成base64
- java.lang.LinkageError: JAXB 2.0 API is being loaded from the bootstrap classloader, but this RI(***
- Ruby-数字&字符串
- 使用log_format为Nginx服务器设置更详细的日志格式
- ZOJ 3551 Bloodsucker(概率)
- freenode irc 如何注册
- linux下搭建mrbs会议室预定管理系统
- 各种浏览器全屏模式的方法、属性和事件介绍
- BZOJ1029 [JSOI2007] 建筑抢修
- Fld selectn for mvmt type 551 / acct 400001 differs for Customer goods movement (015) Message no. M7
- 详解PHP_EOL
- 关系型数据库管理系统
- webkit--nodejs