Edd*_*223 4 c++ macros c-preprocessor c++11
是否有跨平台方式来检测调试模式编译?如果没有,那么如何为顶级编译器做到这一点; MSVC,GNU&MINGW,mac,clang,intel.
例如,MSVC可以检测调试模式,如下所示.
#if defined _DEBUG
// debug related stuff here
#else
// release related stuff here
#endif
Run Code Online (Sandbox Code Playgroud)
对于许多或大多数编译器,"调试"模式是一个包含多个正交设置的多方面概念.例如,使用gcc,您可以使用输入代码添加调试符号,使用-g启用优化-O或禁用assert()宏-DNDEBUG(以定义NDEBUG宏).在我的工作中,我们已经部署了生产代码,其中包含许多启用或禁用的组合.我们已经离开-g了,以便附加到正在运行的进程并使用它们进行故障排除gdb(在这种情况下,我们通常需要与意大利面一起战斗-O 生成),左侧断言以获取有关跨版本的持久性错误的更多信息,以及针对"未定义行为"的更宽松解释(直到我们可以修复/替换它)编写的遗留代码库的禁用优化.
由于NDEBUG宏实际上影响了生成代码的语义(并且某些库在定义宏时是否更改了它们的ABI),这可能是您问题的最便携式答案.但是,如果您正在使用该宏来便携地检测优化构建,那么您可能会获得成功.