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

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

如果相信

#ifdef NDEBUG // nondebug #else // debug code #endif 

是最便携的。

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

由于没有调试或发布的标准定义,因此无法实现此目的。 我可以想到至少有四种不同的东西,它们都可以独立改变。 只能在代码中测试两个。

  1. 编译器优化级别
  2. 调试二进制中包含的符号(甚至可以在以后删除它们)
  3. assert()已启用(未定义NDEBUG)
  4. 记录关闭

编辑:我误读了这个问题,并在另一个切线上胡扯! 道歉……宏_NDEBUG用于Linux以及Windows …

如果构建了二进制文件并且您需要确定构建是否是发布/调试,那么您可以获得hex转储,如果您看到其中包含大量符号的调试信息…例如,在Linux下,使用字符串效用。 SysInternals有一个适用于Windows的版本,可在technet上找到 。 二进制可执行文件的发行版本不会有代表不同符号的字符串……

字符串some_binary

希望这会有所帮助,最好的问候,汤姆。