5
假设我有一个很长的算法,我希望可以详细地调试它。到目前为止,我只是在代码中添加了很多if verbose then printf "whatever"
,但是如果我不想在详细模式下使用它,则会强制代码执行许多无用的测试。OCaml中的条件编译
有没有办法获得一个简单的条件编译,如果一个标志被设置,它可以忽略printf行?
东西,比如我可以在C使用#IFDEF DEBUG printf .. #ENDIF
假设我有一个很长的算法,我希望可以详细地调试它。到目前为止,我只是在代码中添加了很多if verbose then printf "whatever"
,但是如果我不想在详细模式下使用它,则会强制代码执行许多无用的测试。OCaml中的条件编译
有没有办法获得一个简单的条件编译,如果一个标志被设置,它可以忽略printf行?
东西,比如我可以在C使用#IFDEF DEBUG printf .. #ENDIF
你在找什么可以camlp4找到。如果包括预定义宏,那么你可以使用-D(和-U到民主基金他们)在命令行上定义的标志:
camlp4o pa_macro.cmo -DFOO file.ml
在代码中,它看起来是这样的:
let f x = IFDEF FOO THEN x + 1 ELSE x - 1 END;;