代码之家  ›  专栏  ›  技术社区  ›  JRM

编译出版本内置的代码

d
  •  7
  • JRM  · 技术社区  · 16 年前

    在C语言中,你可能有

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

    debug(mymodule) {
       //Do something
    }
    

    但这需要用户对每个模块进行pass-debug来启用它。

    我正在寻找一种全局机制,它总是在正常的构建中运行代码,但在传递-release标志时将其编译出来。我知道有些内置程序有这个功能(比如断言),但是用户代码有没有办法也这么做呢?

    3 回复  |  直到 16 年前
        1
  •  15
  •   Michael Celey Luís Ledebour    13 年前

    调试有一个全局的概念。写下:

    debug {
        ... code ...
    }
    
        2
  •  3
  •   0scar    16 年前

    dmd -release -version=dist module.d

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

    我能想到的最好的。

    [更新]

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

        3
  •  1
  •   FeepingCreature    16 年前

    如果找不到更好的答案,像这样的解决方法应该会奏效: bool debugMode() { bool res; assert(!!(res = true)); return res; }