假设我有一个很长的算法,我希望它可以选择详细调试它。到目前为止,我只是在代码周围添加了许多if verbose then printf "whatever"
但这会强制代码执行许多无用的测试,如果我不想让它处于详细模式。
有没有办法获得一个简单的条件编译,如果设置了一个标志就可以忽略printf行?
例如,我可以使用#IFDEF DEBUG printf .. #ENDIF
答案 0 :(得分:7)
您正在寻找的内容可以在camlp4中找到。如果包含预定义的宏,则可以使用-D(和-U来取消它们)在命令行上定义标志:
camlp4o pa_macro.cmo -DFOO file.ml
在代码中它看起来像这样:
let f x = IFDEF FOO THEN x + 1 ELSE x - 1 END;;