在C ++中,我写了
bool positive (int a)
{
#ifdef DEBUG
cout << "Checking the number " << a << "\n";
#endif
return a > 0;
}
在OCaml我可以写
let positive x =
begin
printf "Checking the number %d\n" x;
x > 0
end
但是如何在不处于调试模式时禁用printf语句?
答案 0 :(得分:4)
如果没有预处理,您只需将全局标志定义为let debug = true
并写入:
if debug then printf ...;
如果debug
为false,则ocamlopt将删除此代码。也就是说,它很麻烦,只应在生产代码的性能至关重要的情况下使用。
另一个不太优化的选项是拥有一个可变标志。这样更方便,因为您不必重建程序来激活或停用调试日志记录。您可以使用命令行选项来控制它(请参阅Arg
模块的文档)。
let debug = ref false ... if !debug (* i.e. debug's value is true *) then printf ...;
答案 1 :(得分:3)
你可以使用cppo:https://github.com/mjambon/cppo。 这可以通过opam获得,并提供C类预处理器功能。