C语言 #define 与 const的区别

1.编译器处理方式不同
define宏是预处理阶段展开
const常量是编译运行阶段使用

define是宏定义,程序在预处理阶段将用define定义的内容进行替换,因此程序运行时常量表中并没有用define定义的常量,系统不为其分配内存。
const常量是编译运行时的常量,系统为其分配内存。

2.类型跟安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开
const常量有具体的类型,编译运行时会执行类型检查

3.存储方式不同
define仅仅是展开,有多少地方使用就展开多少次,不分配内存
const常量会在内存中分配(可以在堆中也可以在栈中)

4.const可以节省空间,避免不必要的的内存分配。

define注意“边缘效应”,
例:#define N 2+3 //N的值是5
int a = N/2,//在编译时我们预想a=2.5,实际打印结果是3.5
原因是在预处理阶段,编译器将a=N/2处理成a=2+3/2,这就是define宏的边缘效应;
所以我们应该写成#define N (2+3)

你可能感兴趣的:(C语言 #define 与 const的区别)