简单的断言

断言是一个声明,用于声明在达到该行代码时事实必须为真。断言有助于确保满足预期条件。当传递给断言的条件为真时,没有动作。错误条件下的行为取决于编译器标志。启用断言时,错误输入会导致程序立即停止。禁用时,不执行任何操作。通常的做法是在内部和调试版本中启用断言,并在发布版本中禁用它们,尽管断言通常在发布时启用。 (终止比错误更好还是更差取决于程序。)断言应该仅用于捕获内部编程错误,这通常意味着传递错误的参数。

#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)。