<cassert>

assert

void assert (int expression);
评估断言
如果这个函数形式的宏的参数 expression 等于零(即表达式为),一条消息将被写入标准错误设备,并调用 abort 来终止程序执行。

显示的消息的具体内容取决于特定的库实现,但它至少应包含:断言失败的 expression、源文件的名称以及它发生的行号。一个通常的表达式格式是

Assertion failed: expression, file filename, line line number

如果在包含 <assert.h> 的时候,一个名为 NDEBUG 的宏已经被定义,那么这个宏就会被禁用。这允许程序员在调试程序时在源代码中包含任意数量的 assert 调用,然后在发布版本中通过简单地添加一行代码来禁用所有这些断言,例如:
1
#define NDEBUG 
在代码的开头,在包含 <assert.h> 之前。

因此,这个宏旨在捕获编程错误,而不是用户或运行时错误,因为它通常在程序退出调试阶段后被禁用。

参数

expression
要被评估的表达式。如果该表达式的计算结果为 0,则会导致断言失败,从而终止程序。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* assert example */
#include <stdio.h>      /* printf */
#include <assert.h>     /* assert */

void print_number(int* myInt) {
  assert (myInt!=NULL);
  printf ("%d\n",*myInt);
}

int main ()
{
  int a=10;
  int * b = NULL;
  int * c = NULL;

  b=&a;

  print_number (b);
  print_number (c);

  return 0;
}

在此示例中,如果 print_number 以空指针作为属性被调用,assert 将用于中止程序执行。这发生在对该函数的第二次调用时,它触发了断言失败以提示这个错误。