c++ - NDEBUG 预处理器宏用于(在不同平台上)是什么?

标签 c++ c cross-platform c-preprocessor ndebug

我对各种平台/编译器(“实现”)/框架分配给 C 和 C++ 预处理器宏 NDEBUG 的用途感兴趣。

C和C++标准只提到过一次这个定义,即控制assert()宏的行为。

我会要求只包含具体的答案,您知道 C 或 C++ 的某个平台/框架/库使用 NDEBUG 定义启用或禁用任何其他除了标准定义的assert()

提出这个问题的一个原因是 MS(Visual-C++)总是(?)使用“他们的”_DEBUG定义来区分调试和发布的东西,我想知道这是否是库/平台拥有“自己的”调试定义的常见做法,或者其他库/平台是否使用 NDEBUG 进行与调试相关的东西。

最佳答案

关于 NDEBUG 的唯一“标准”内容是用来控制assert宏将扩展为执行检查或不执行检查的内容。 MSVC 通过在项目中为您定义此宏,有助于在发布构建配置中定义此宏。您可以通过编辑项目配置来手动更改它。其他工具链可能(也可能不会)做类似的事情。

请注意,您还可以更改 NDEBUG 的状态使用 #define 的翻译单元(源文件)中的宏和/或 #undefNDEBUG并重新包含 assert.h更改 assert 的方式宏的行为(打开和关闭它)。该行为是标准规定的,并且是唯一一次(我认为)该标准允许第二次包含标准 header 以在第二次包含后更改编译行为。

关于c++ - NDEBUG 预处理器宏用于(在不同平台上)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5473556/

相关文章:

C - 单向链表中的指针和前置

c++ - 在跨平台代码中处理 stdafx.h

c++ - Boost 的 UDP 异步客户端接收自己的数据报

c++ - 无法以编程方式确定我的应用程序使用哪个 TLS 版本

c++ - 递归策略模式

c - GDB 不会在没有调试信息的情况下跳过函数

c - 传递 C 字符串并将其与本地指针一起使用

c++ - 如何将 Qt 应用程序部署到其他系统?

windows - 支持 Mac 和 Windows 桌面的建议

c++ - 从 dev C++ 发送数据到记事本