【发布时间】:2014-03-26 05:04:53
【问题描述】:
在“C接口和实现”4.3中,在assert.h中:
#undef assert
#ifdef NDEBUG
#define assert(e) ((void)0)
#else
#include "except.h"
extern void assert(int e);
#define assert(e) ((void)((e)||(RAISE(Assert_Failed), 0)))
#endif
extern void assert(int e); 的目的是什么?因为在assert.c中,它是由assert宏实现的。
【问题讨论】:
-
assert.c 和 except.h 中有什么?
-
void (assert)(int e) { assert(e); }
-
@self:问题很明确,他在问为什么
assert的宏和函数(其定义又是一个宏)都被定义了。 -
@brokenfoot 是的,我知道。所以?普通断言不需要两者。
-
这样,如果你以后做
#undef assert,你仍然可以assert(condition)。请注意,#undef assert是未定义的行为,因此执行此操作是出于善意,而不是出于任何义务。