重回C语言之老兵重装上阵(二)#define 与 const 的区别

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