C/C++:检测调试/发布的便携方式?

siv*_*udh 16 c c++

是否有标准化(例如由所有主要编译器实现)#define,这将允许我区分调试和发布版本?

Joh*_*ler 19

如果相信

 #ifdef NDEBUG
  // nondebug
 #else
  // debug code
 #endif
Run Code Online (Sandbox Code Playgroud)

是最便携的.

但是没有编译器知道你是在编译调试还是发布,所以这不是自动的.但是这个由assert.h在c-runtime中使用,所以它很常见.Visual Studio将设置它,我相信大多数其他IDE也会.

  • 那是不一样的.定义NDEBUG会关闭断言宏.没有其他的.这确实__NOT__意味着调试. (5认同)
  • @KeithB:这个问题是最便携的方式,而不是最符合标准的方式,所以所有这些标准的挑选都是缺失的. (5认同)
  • @Martin:实际上是非暴徒.如果它打算_only_关闭断言宏,他们就会把它叫做NOASSERT.你应该在开始分数之前阅读我写的内容. (4认同)