【问题标题】:OCaml custom compiler warningsOCaml 自定义编译器警告
【发布时间】:2014-05-12 15:07:12
【问题描述】:

是否可以让ocamlc 在编译时产生自定义警告?我有一些半成品的代码,我想提醒一下它还没有完成。举个例子:我想写一个reverse 函数。我现在懒得去想如何编码,所以我只写了一些类型检查的东西。

let reverse xs = xs

我想写一些类似的东西

let reverse xs = Compiler_Warning "TODO: reverse"; xs

这可能吗?我很想听听获得类似结果的任何技巧。

【问题讨论】:

    标签: ocaml compiler-warnings


    【解决方案1】:

    一个常见的技巧是使用failwith "not implemented" 或只是assert false 引发异常。

    如果您在未实现的函数中有未使用的参数,这会给您一个警告。虽然,默认情况下它们是禁用的。所以你需要添加 -Wall 选项来启用它们。

    此外,您可以在实现中添加一个有意未使用的变量,例如:

    let reverse xs =
      let unimplemented = () in 
      xs
    

    【讨论】:

    • 谢谢ivg。 failwithassert false 技巧不适用于我的情况,因为我希望在编译时发出警告。但我非常喜欢你的let unimplemented = () 把戏,所以我会在此基础上接受你的回答。
    【解决方案2】:

    您可能对 cppo pre-processor 感兴趣,它自称是 OCaml 程序的 cpp 等效项,并具有 #warning 指令。似乎可以通过opam 获得。

    【讨论】:

      【解决方案3】:

      您可以使用扩展点执行此操作,目前计划以类似方式发送至annotate deprecated functions。正如 ivg 所提到的,failwith "TODO" 是您想要的标准,但您不会收到编译时警告——尽管您可能会收到函数中每个参数的未使用参数警告。

      【讨论】:

        猜你喜欢
        • 2014-04-12
        • 2010-11-28
        • 1970-01-01
        • 2011-05-09
        • 2020-05-15
        • 2011-09-28
        • 1970-01-01
        • 2010-12-17
        相关资源
        最近更新 更多