简单的断言
断言是一个声明,用于声明在达到该行代码时事实必须为真。断言有助于确保满足预期条件。当传递给断言的条件为真时,没有动作。错误条件下的行为取决于编译器标志。启用断言时,错误输入会导致程序立即停止。禁用时,不执行任何操作。通常的做法是在内部和调试版本中启用断言,并在发布版本中禁用它们,尽管断言通常在发布时启用。 (终止比错误更好还是更差取决于程序。)断言应该仅用于捕获内部编程错误,这通常意味着传递错误的参数。
#include <stdio.h>
/* Uncomment to disable `assert()` */
/* #define NDEBUG */
#include <assert.h>
int main(void)
{
int x = -1;
assert(x >= 0);
printf("x = %d\n", x);
return 0;
}
NDEBUG
undefined 可能输出:
a.out: main.c:9: main: Assertion `x >= 0' failed.
NDEBUG
定义的可能输出:
x = -1
全局定义 NDEBUG
是一种很好的做法,这样你就可以轻松编译所有断言的代码,无论是打开还是关闭。一种简单的方法是将 NDEBUG
定义为编译器的选项,或者在共享配置头中定义它(例如 config.h
)。