Const用来定义常变量,占用存储单元,带类型。
#define是宏定义语句,它是预编译指令,只是用符号常量代替一个字符串。
区别:
(1) 编译器处理方式不同
define宏是在预处理阶段展开。
const常量是编译运行阶段使用。
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
编译器可以对const常量进行类型安全检查。而对前者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配存储单元。
const常量系统会给其分配存储单元(可以是堆中也可以是栈中)。
(4) 系统内存占用
对于const 变量,系统只给了一个相应的内存地址,而#define则是给出了一个立即数。因为const变量是存放在内存的静态区域中,所以在程序运行过程中const变量只有一个拷贝,而#define 所定义的宏变量却有多个拷贝,所以宏在程序运行过程中所消耗的内存要比const变量的大得多。