当前位置: 首页 > news >正文

C 语言开发问题:使用 <assert.h> 时,定义的 #define NDEBUG 不生效

问题与处理策略

问题描述
#include <stdio.h>
#include <assert.h>#define NDEBUGint divide(int a, int b) {assert(b != 0);  // 确保除数不为 0return a / b;
}int main() {printf("%d\n", divide(10, 2));printf("%d\n", divide(10, 0));return 0;
}
# 输出结果5
Assertion failed: b != 0
  • 其中,定义的 #define NDEBUG 不生效,assert 操作还是发生
问题原因
  1. #define NDEBUG 必须写在 #include <assert.h> 之前,否则 assert() 不会被禁用

  2. assert 是一个宏,<assert.h> 在首次包含时会根据 NDEBUG 是否存在来决定 assert() 的行为,详见源码

#ifdef NDEBUG#define assert(expression) ((void)0)#else_ACRTIMP void __cdecl _wassert(_In_z_ wchar_t const* _Message,_In_z_ wchar_t const* _File,_In_   unsigned       _Line);#define assert(expression) (void)(                                                       \(!!(expression)) ||                                                              \(_wassert(_CRT_WIDE(#expression), _CRT_WIDE(__FILE__), (unsigned)(__LINE__)), 0) \)#endif
处理策略
  • #define NDEBUG 必须要在 #include <assert.h> 之前
#define NDEBUG#include <stdio.h>
#include <assert.h>int divide(int a, int b) {assert(b != 0);  // 确保除数不为 0return a / b;
}int main() {printf("%d\n", divide(10, 2));printf("%d\n", divide(10, 0));return 0;
}
# 输出结果5
(进程 23256)已退出,代码为 -1073741676 (0xc0000094)。

相关文章:

  • Transformer框架解析:从“Attention is All You Need”到现代AI基石
  • 20.3 使用技巧9
  • 回车键监听
  • NLP与社区检测算法的结合:文本中的社区发现
  • OpenCV 图形API(49)颜色空间转换-----将 NV12 格式的图像数据转换为 BGR 颜色空间函数NV12toBGR()
  • Linux进程5-进程通信常见的几种方式、信号概述及分类、kill函数及命令、语法介绍
  • flutter 专题 六十三 Flutter入门与实战作者:xiangzhihong8Fluter 应用调试
  • WINDOWS下使用命令行读取本地摄像头FFMPEG+DirectShow,ffplay直接播放摄像头数据
  • 安装ntfs硬盘系统时,报错Error: Unable to find a match: epel-release的解决方法
  • Federated Feature Augmentation and Alignment
  • ECharts散点图-散点图13,附视频讲解与代码下载
  • 机器学习-08-推荐算法-案例
  • Cad c# 射线法判断点在多边形内外
  • 淘宝店铺详情API接口返回数据说明
  • 精益数据分析(10/126):深度剖析数据指标,驱动创业决策
  • EXCEL学习
  • 天元证券|AI驱动需求井喷 光模块上市公司业绩爆发
  • Oracle for Linux安装和配置(11)——Linux配置
  • 深入理解 DML 和 DQL:SQL 数据操作与查询全解析
  • Spring Boot 集成 Redis 实战总结
  • 致敬劳动者!今年拟表彰2426名全国劳动模范和先进工作者
  • 福建浯屿岛垃圾排海追踪:堆存已清理,当地称今后会日产日清日运
  • 著名政治学学者、中国人民大学教授仝志敏逝世
  • 法官颁布紧急临时禁止令,中国留学生诉美国政府“首战胜利”
  • 新城市志|全球供应链动荡加剧,中国稳外贸有信心有底气
  • 张小泉:控股股东所持18%股份将被司法拍卖,不会导致控制权变更