良性取消定义

在 C 标准库里面,\<assert.h> 中有一段这样的代码:

#undef assert
#ifdef NDEBUG
#define assert (test) ((void)0)
#else
#define assert (test) ...
#endif

这里面第一行就是 良性取消定义,它是用来保证先前已经 define 的 assert 不会影响接下来的 assert。如果先前没有 define assert,那么这个语句也不会产生任何副作用。当使用一些可变的定义时,良性取消定义是必要的。