我对各种平台/编译器(“实现”)/框架分配给 C 和 C++ 预处理器宏 NDEBUG
的用途感兴趣。
C和C++标准只提到过一次这个定义,即控制assert()
宏的行为。
我会要求只包含具体的答案,您知道 C 或 C++ 的某个平台/框架/库使用 NDEBUG
定义启用或禁用任何其他除了标准定义的assert()
宏。
提出这个问题的一个原因是 MS(Visual-C++)总是(?)使用“他们的”_DEBUG
定义来区分调试和发布的东西,我想知道这是否是库/平台拥有“自己的”调试定义的常见做法,或者其他库/平台是否使用 NDEBUG
进行与调试相关的东西。
最佳答案
关于 NDEBUG
的唯一“标准”内容是用来控制assert
宏将扩展为执行检查或不执行检查的内容。 MSVC 通过在项目中为您定义此宏,有助于在发布构建配置中定义此宏。您可以通过编辑项目配置来手动更改它。其他工具链可能(也可能不会)做类似的事情。
请注意,您还可以更改 NDEBUG
的状态使用 #define
的翻译单元(源文件)中的宏和/或 #undef
在 NDEBUG
并重新包含 assert.h
更改 assert
的方式宏的行为(打开和关闭它)。该行为是标准规定的,并且是唯一一次(我认为)该标准允许第二次包含标准 header 以在第二次包含后更改编译行为。
关于c++ - NDEBUG 预处理器宏用于(在不同平台上)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5473556/