我只能看出相似之处,而无法看出区别...
#define MAX_NAME_LENGTH 32
对比
#define MAX(a, b) ((a) > (b) ? (a) : (b))
enum {
MAX_NAME_LENGTH = 32
}
或者
const size_t MAX_NAME_LENGTH = 32;
这些提供了更好的可测试性,通常与调试器配合使用效果更好(因为它们是适当的一级符号),并且不依赖于文本替换技术。
C语言中的常量(你问过这个问题)是数字常量(0、1、0x0、0.1、1.E-10等)、整数字符常量('a'、'\n'、L'A'等)和枚举常量(它们的类型为int
!)。因此,后者是唯一可以由程序定义的。
用const
属性限定的变量在C语言中不是常量的意义。(最好将const
读作unmutable
或invariant
)
宏只是在预处理阶段进行的文本替换。通常标准库头文件包含宏,这些宏会扩展到相应系统的适当常量。例如:NULL
、false
、true
、INT_MAX
、CHAR_BIT
等。
const
并不意味着将某些内容作为编译时常量。例如,您不能使用它来声明静态分配数组的大小。 - detlyMAX_NAME_LENGTH
也是一个宏(macro)。(它不是一个类似函数的宏。)我认为更好的描述应该是宏实际上只是文本替换。 - jamesdlin