D(D2)中是否有任何机制强制在发布版本中编译出代码?
在C中,您可能会有类似
的内容#ifndef NDEBUG
/*Something that will only run in a debug build*/
#endif
我知道D有
debug(mymodule) {
//Do something
}
但这需要用户为每个模块传递-debug以启用它。
我正在寻找一种全局机制,它总是在正常构建中运行代码,但在传递-release标志时将其编译出来。我知道一些内置函数具有这种能力(例如断言),但是用户代码有没有办法做到这一点?
答案 0 :(得分:15)
有一个全球性的调试概念。只需写下:
debug {
... code ...
}
答案 1 :(得分:3)
dmd -release -version=dist module.d
和
version(dist) {} else {
int i = 9;
}
我能想到的最好。
<强> [更新] 强>
就个人而言,我认为上述答案“不好”。上述解决方案会在发布过程中引入过于复杂的逻辑,我认为这应该是直截了当的,并且可预测。我建议您只使用-debug
和debug{ //... }
。即使您觉得在编译时可能会忘记添加调试标志 - 您只是在丢弃! - 错误很便宜。进入释放的错误更糟糕。
答案 2 :(得分:1)
如果没有找到更好的答案,那么像这样的hackaround应该有效:bool debugMode() { bool res; assert(!!(res = true)); return res; }