05-重定义常量
16.2.2 重定义常量
假设先把 LIMIT 定义为 20 ,稍后在该文件中又把它定义为 25 。这个过程称为重定义常量。不同的实现采用不同的重定义方案。除非新定义与旧定义相同,否则有些实现会将其视为错误。另外一些实现允许重定义,但会给出警告。ANSI标准采用第1种方案,只有新定义和旧定义完全相同才允许重定义。
具有相同的定义意味着替换体中的记号必须相同,且顺序也相同。因此,下面两个定义相同:
#define SIX 2 * 3
#define SIX 2 * 3
这两条定义都有3个相同的记号,额外的空格不算替换体的一部分。而下面的定义则与上面两条宏定义不同:
#define SIX 2*3
这条宏定义中只有一个记号,因此与前两条定义不同。如果需要重定义宏,使用 #undef 指令(稍后讨论)。
如果确实需要重定义常量,使用 const 关键字和作用域规则更容易些。