在C++中禁用断言宏
Disabling assert macro in C++
我正在尝试以这种方式禁用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上运行,否则你可能不应该禁用它们。
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- C++ 使用增强正则表达式库时断言崩溃
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 如何将向量断言到特征矩阵
- OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算
- 使用 Google Test 对自定义断言函数进行单元测试
- 断言"id < 0"在Qt ActiveX中失败
- 初始值设定项列表构造和静态断言
- 在 CppUnit 中测试中止断言失败
- 使用扫描的调试断言失败
- MS 本机单元测试 - 断言::线程失败不起作用
- 如何断言 CRTP 的函数为最终函数?
- 迭代器跳闸视觉C++ 2017 断言
- 如何在 google test in windows 中管理断言
- 为什么我的Qt程序在断言失败后继续运行?
- 在C++中禁用断言宏
- 宏"断言"会在 C++20 中删除吗?
- 在 constexpr 函数中断言
- 如何在 c++11 中静态断言 std::array 类成员进行排序?