我只能弄清楚相似之处,而不是差异......
答案 0 :(得分:7)
宏接受参数并且(通常)生成实际代码,#define:d常量只是一个值:
例如:
#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;
这些提供了更好的可测试性,通常可以更好地与调试器一起使用(因为它们是正确的第一级符号),并且不依赖于文本替换技术。
答案 1 :(得分:0)
C中的常量(你问过这个)是数值常数(0,1,0x0,0.1,1.E-10,...),整数字符常数('a','\ n',L'一个',...)和枚举常量(类型为int
!)。所以后者是唯一可以由程序定义的。
使用const
属性限定的变量不是C语义上的常量。(最好在此处const
或unmutable
阅读invariant
宏只是在预处理阶段完成的文本替换。标准库头通常包含扩展到相应系统的适当常量的宏。例如NULL
,false
,true
,INT_MAX
,CHAR_BIT
,......