Mar*_* Ba 37 c c++ cross-platform ndebug c-preprocessor
我对各种平台/编译器("实现")/框架分配给C和C++预处理器宏的目的感兴趣NDEBUG.
该Ç以及C++标准只提及这个定义一次,即控制的行为assert()宏.
我会要求只包含特定的答案,您知道C或C++ 的某个平台/框架/库使用该NDEBUG定义来启用或禁用除标准定义的assert()宏之外的任何其他内容.
提出这个问题的一个原因是MS(Visual-C++)总是(?)使用"他们的" _DEBUG定义来区分调试和发布内容,我想知道这是否是图书馆/平台的常见做法"自己的"调试定义或其他库/平台是否NDEBUG用于调试相关的东西.
Mic*_*urr 27
唯一的"标准"问题NDEBUG是,它用于控制assert宏是否会扩展为执行检查的内容.MSVC通过在项目中为您定义宏,在发布版本配置中帮助定义此宏.您可以通过编辑项目配置手动更改它.其他工具链可能(或可能不)做类似的事情.
请注意,您还可以更改的状态NDEBUG用一个翻译单元(源文件)中的宏#define和/或#undef上NDEBUG,并重新包括assert.h改变如何assert宏观运行(打开和关闭).该行为是由标准强制执行的,并且是唯一一次(我认为)标准允许第二次包含标准标题以在第二次包含之后更改编译行为.
Dev*_*lar 23
这是对所讨论框架的维护者的决定.由于这些决定可能会发生变化,因此您不应该依赖这些决定.我使用NDEBUG作为调试相关的所有内容(例如跟踪输出),但我可能会在下一个版本中改变主意.没有人能在这里给出的答案是检查您在给定项目中使用的框架的API文档的替代品.
话虽这么说,在图书馆/框架头使用NDEBUG,为别的,但是 assert(),将是一个相当愚蠢的设计决策.应用程序员明确允许在包含任何库或框架的头之前和/或之后设置/取消设置NDEBUG但是他认为合适,因此lib/framework维护者不能依赖于为释放lib设置的NDEBUG或者没有设置用于调试lib.我怀疑任何重要的项目都会依赖于NDEBUG.
| 归档时间: |
|
| 查看次数: |
37908 次 |
| 最近记录: |