编译处理器

#define宏定义 预处理阶段展开

const常量 编译运行阶段使用

类型和安全

#define 不检查 没有类型

const 又具体类型 编译阶段检查类型

储存方式

#define宏定义的时候不分配内存 变量定义才会

const常量分配

const节约内存

const定义常量只是给出了对应的内存地址

#define一样给出的是立即数,

const定义的常量在程序运行过程中只有一份拷贝(因为是全局的只读变量,存在静态区)

#define定义的常量在内存中有若干个拷贝。

宏替换只作替换,不做计算

宏预编译时就替换了,程序运行时,并不分配内存

常量定义规则

  1. 需要对外公开的常量放在头文件中,不需要对外公开的常量放在定义文件的头部。为便于管理,可以把不同模块的常量集中存放在一个公共的头文件中。
  2. 如果某一常量与其它常量密切相关,应在定义中包含这种关系,而不应给出一些孤立的值。