C中的符号常量和宏有什么区别?

时间:2010-09-13 06:47:19

标签: c

我只能弄清楚相似之处,而不是差异......

2 个答案:

答案 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语义上的常量。(最好在此处constunmutable阅读invariant

宏只是在预处理阶段完成的文本替换。标准库头通常包含扩展到相应系统的适当常量的宏。例如NULLfalsetrueINT_MAXCHAR_BIT,......