在C++中禁用断言宏

问题描述 投票:0回答:1

我想用这种方式禁用C++中的断言宏。

#include <stdio.h>      /* printf */
#include <assert.h>     /* assert */

#define NDEBUG

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;
}

这个... 官网 说,如果我定义了NDEBUG,所有的断言宏将被禁用。这样一来 行不通. 你能告诉我如何解决吗?

c++ macros assert
1个回答
3
投票

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

有两种方法可以实现。

  • 把... #define NDEBUG 前面那行字 #include <assert.h>或...;
  • 确定 NDEBUG 命令行上,做一些类似的事情。
cc -DNDEBUG main.c

也许你也应该退一步考虑 为什么要禁用断言? 毕竟,断言的存在是有原因的,所以除非你运行在40MHz的SPARC工作站上,否则你可能不应该禁用它们。

© www.soinside.com 2019 - 2024. All rights reserved.