#define
:是预处理指令,进行文本替换。编译器在编译前将所有 #define 定义的常量值替换为对应的常量值。const
: 是声明常量,具有类型信息。在程序运行时,会为常量分配内存并存储其值。#define
:不进行类型检查,只进行简单的文本替换。编译器无法检测常量的类型,因此容易引发类型错误。const
:具有类型信息,编译器能够进行类型检查,有助于捕获潜在的类型错误。#define
:定义的常量在整个文件中有效。它没有作用域限制,会影响后续的所有代码,可能导致意外的覆盖。const
:定义的常量具有块级作用域,仅在定义所在的作用域内有效。常量的作用域受到限制,更加安全。#define
:定义的常量在符号表中不会有相应的条目,因为它只是进行文本替换。调试时无法查看该常量。const
:定义的常量会有一个对应的符号表条目,便于调试。调试时,常量可以显示其类型和值。#define
:没有内存分配,替换后直接在代码中使用常量值。const
:在程序中会为常量分配内存,存储常量值。