在C++中禁用断言宏

Disabling assert macro in C++

本文关键字:断言 C++      更新时间:2023-10-16

我正在尝试以这种方式禁用C++断言宏:

#include <stdio.h>      /* printf */
#include <assert.h>     /* assert */
#define NDEBUG
void print_number(int* myInt) {
assert (myInt != NULL);
printf ("%dn", *myInt);
}
int main ()
{
int a = 10;
int * b = NULL;
int * c = NULL;
b = &a;
print_number (b);
print_number (c);
return 0;
}

官方网站说,如果我定义NDEBUG,所有断言宏都将被禁用。这种方式是行不通的。你能告诉我如何解决它吗?

NDEBUG定义控制assert宏的定义,而不是其扩展。 为了使它有效,您需要在定义宏本身之前定义它,这发生在assert.h.

有两种方法可以实现这一点:

  • #define NDEBUG放在显示#include <assert.h>的行之前;或
  • 在命令行上定义NDEBUG,如下所示:
cc -DNDEBUG main.c

也许您还应该退后一步,考虑为什么要尝试禁用断言。 毕竟,这些断言是有原因的,所以除非你在40MHz SPARCstation上运行,否则你可能不应该禁用它们。