#undef取消定义

使用#undef来取消一个宏的定义。

取消一个本来就没有定义的宏,不算错误。取消之后,可以使用#define给宏一个新的定义。

#undef中不进行宏扩展。

标准C允许使用#define重复定义同一个宏,但要求宏的定义是一样的,包括使用的符号和空白的位置,当然具体的空白字符可以不同。如:

#define NULL 0
#define FUNC(x) x+4
#define NULL /* null pointer */ 0
#define FUNC(x) x + 4
#define FUNC(y) y + 4

NULL的重定义是合法的,而FUNC的两个重定义都不合法。

在实践中,程序员不应该依赖这种重复定义,一个定义应该只出现在一个地方。