在D中编译发布版本的代码

时间:2010-07-06 22:56:20

标签: d

D(D2)中是否有任何机制强制在发布版本中编译出代码?

在C中,您可能会有类似

的内容
#ifndef NDEBUG
/*Something that will only run in a debug build*/
#endif

我知道D有

debug(mymodule) {
   //Do something
}

但这需要用户为每个模块传递-debug以启用它。

我正在寻找一种全局机制,它总是在正常构建中运行代码,但在传递-release标志时将其编译出来。我知道一些内置函数具有这种能力(例如断言),但是用户代码有没有办法做到这一点?

3 个答案:

答案 0 :(得分:15)

有一个全球性的调试概念。只需写下:

debug {
    ... code ...
}

答案 1 :(得分:3)

dmd -release -version=dist module.d

version(dist) {} else {
    int i = 9;
}

我能想到的最好。

<强> [更新]

就个人而言,我认为上述答案“不好”。上述解决方案会在发布过程中引入过于复杂的逻辑,我认为这应该是直截了当的,并且可预测。我建议您只使用-debugdebug{ //... }。即使您觉得在编译时可能会忘记添加调试标志 - 您只是在丢弃! - 错误很便宜。进入释放的错误更糟糕。

答案 2 :(得分:1)

如果没有找到更好的答案,那么像这样的hackaround应该有效:bool debugMode() { bool res; assert(!!(res = true)); return res; }