const与#define
来源:互联网 发布:中国网络资讯台无锡市 编辑:程序博客网 时间:2024/05/29 12:27
(1) 编译器处理方式不同
define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。
(4)const 可以节省空间,避免不必要的内存分配。例如:
#define PI 3.14159 //常量宏
const doulbe Pi=3.14159; //此时并未将Pi放入ROM中 ……
double i=Pi; //此时为Pi分配内存,以后不再分配!
double I=PI; //编译期间进行宏替换,分配内存
double j=Pi; //没有内存分配
double J=PI; //再进行宏替换,又一次分配内存!
const定义常量从汇编的角度来看,只是给出了对应的内存地址,而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。
(5)提高了效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
比较:
1.对于const 变量,系统只给了一个相应的内存地址,而#define则是给出了一个立即数。因为const变量是存放在内存的静态区域中,所以在程序运行过程中const变量只有一个拷贝,而#define 所定义的宏变量却有多个拷贝,所以宏在程序运行过程中所消耗的内存要比const变量的大得多。#define所定义的宏变量在预编译的时候进行替换,const变量在编译时确定其值。const,enum 变量进符号表,可在调试中查看变量的值.而#define不行。
2.const 对数据进行类型检查。#define 无需进行类型检查。定义宏参数时需将参数()起来。而且调用时参数不应在宏中再做运算。
3.除了定义常量外,const 还有强大的修饰功能。#define 能增加程序的可读性,有些复杂的功能只需一条宏显示。
const除此之外还有一个在函数方法上防止修改的作用,详见笔者博客之前的文章《const在函数和方法上的防修改作用 》。
- #define 与 const
- #define 与 const
- static const与#define
- const 与define
- const 与 define
- #define 与const区别
- #define 与 const
- const与define
- define与const 区别
- 【引用】const与define
- const与#define
- 比较const与#define
- const与#define
- const与define
- const与#define
- const与define
- const与#define
- const与define
- HDU 5093 Battle ships(二分图)
- SAP中池表Pool Table与簇表Cluster Table详解
- 什么是BI工程师
- Codeforces Round #426 (Div. 2)-B. The Festive Evening
- scala使用reduce和fold方法遍历集合的所有元素
- const与#define
- linux下源码包安装apache
- Atmel Studio-SAM单片机开发 ---EXTINT
- 关于RecyclerView列表点击事件ripple效果失效的问题
- 深搜 加奇偶剪枝
- jQuery获取格式化当前时间
- Kotlin Reference (三) Coding Conventions
- 雷军给程序员的五点建议--如何成为编程高手并以此创业
- [Muduo网络库源码分析] (5) base/FileUtil.cc_h_文件操作