说明const和#define的特点及区别
我们首先要认识到源程序文件(file.c)到生成可执行文件(file.exe)有四个阶段,预处理、编译、汇编、链接
1.编译器处理方式不同
#define是在预处理阶段
const是在编译阶段运行使用
//这边补充一点预处理器根据以#开头的命令,修改原始的程序。比如我们常见的#include <stdio.h>命令告诉处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中。咱们的#define也是,仅仅是单纯的文本替换
2.类型跟安全检查不同
#define没有数据类型,不做任何类型检查,仅仅是展开替换
const常量有具体的数据类型,编译运行时会执行类型检查
3.空间分配不同
#define常量在实际程序中只是一个常数,并不分配空间
const常量存在于程序的数据段,并在堆栈上分配了空间。