2010-09-01 103 views
5

假设我有一个很长的算法,我希望可以详细地调试它。到目前为止,我只是在代码中添加了很多if verbose then printf "whatever",但是如果我不想在详细模式下使用它,则会强制代码执行许多无用的测试。OCaml中的条件编译

有没有办法获得一个简单的条件编译,如果一个标志被设置,它可以忽略printf行?

东西,比如我可以在C使用#IFDEF DEBUG printf .. #ENDIF

回答

7

你在找什么可以camlp4找到。如果包括预定义宏,那么你可以使用-D(和-U到民主基金他们)在命令行上定义的标志:

camlp4o pa_macro.cmo -DFOO file.ml 

在代码中,它看起来是这样的:

let f x = IFDEF FOO THEN x + 1 ELSE x - 1 END;;