面试专栏
问题:define 与 const 的区别
特性 #define (宏) const (常量)
本质 预处理器指令,进行文本替换 编译器处理的具有类型的常量
阶段 在编译前处理 在编译时处理
类型检查 无,容易导致错误 有,安全可靠
作用域 无,从定义点开始到文件末尾(可用#undef取消) 有,遵循块作用域、命名空间作用域等
调试 难以调试,符号表中没有其名称 易于调试,符号表中有其名称和值
内存 不分配内存(字面量替换) 会分配内存(除非被编译器优化掉)
表达式求值 可能导致多次求值(如用在宏参数中) 只求值一次
适用场景 条件编译、防止头文件重复包含、特定平台代码 定义程序中使用的具体常量值