MSVC_DEBUG
在调试模式下定义,gccNDEBUG
在发布模式下定义。我可以在 clang 中使用什么宏来检测代码是为发布还是调试而编译?
问问题
7972 次
4 回答
10
如果您查看 IDE 的项目设置,您会发现这些宏实际上是在那里手动定义的,它们不是由编译器自动定义的。事实上,编译器无法真正知道它是在构建“调试”还是“发布”,它只是根据用户(或 IDE)提供给它的标志来构建。
您必须创建自己的宏并手动定义它们,就像 IDE 在创建项目时为您所做的那样。
于 2013-10-28T13:10:21.353 回答
6
编译器不定义这些宏。您的 IDE/Makefile/<insert build system here>
可以。这不取决于编译器,而是取决于您使用的环境/构建帮助程序。
约定是DEBUG
在调试模式下定义宏,在NDEBUG
发布模式下定义宏。
于 2013-10-28T13:11:12.760 回答
4
您可以使用该__OPTIMIZE__
标志来确定是否正在进行优化。这通常意味着它不是调试版本,因为优化通常会重新排列代码序列。尝试逐步执行优化的代码可能会令人困惑。
这可能是那些对这个问题最感兴趣的人真正想要弄清楚的。
于 2016-07-18T02:39:06.060 回答
2
命令行编译器中没有调试模式之类的东西。这是 IDE 的事情:它只是设置了一些要发送到编译器的选项。
如果你clang
从命令行使用,你可以使用任何你想要的。也是如此gcc
,所以如果gcc
你使用NDEBUG
,你可以使用相同的。
于 2013-10-28T13:11:29.197 回答