#define和const有什么区别?
- 编译器处理方式不同:
#define
宏是在预处理阶段展开,不能对宏定义进行调试,而const
常量是在编译阶段使用; - 类型和安全检查不同:
#define
宏没有类型,不做任何类型检查,仅仅是代码展开,可能产生边际效应等错误,而const
常量有具体类型,在编译阶段会执行类型检查; - 存储方式不同:
#define
宏仅仅是代码展开,在多个地方进行字符串替换,不会分配内存,存储于程序的代码段中,而const
常量会分配内存,但只维持一份拷贝,存储于程序的数据段中。 - 定义域不同:
#define
宏不受定义域限制,而const
常量只在定义域内有效。