通过预处理器禁用或启用代码
Disable or enable code by preprocessor
在 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 语句?
你可以使用 cppo : https://github.com/mjambon/cppo。
这可通过 opam 获得,并提供类似 C 的预处理器功能。
无需预处理,您只需将全局标志定义为 let debug = true
并写入:
if debug then
printf ...;
如果 debug
为假,ocamlopt 将删除此代码。也就是说,它很麻烦,只能在生产代码的性能至关重要的情况下使用。
另一个不太优化的选项是有一个可变标志。这更方便,因为您不必重建程序来激活或停用调试日志记录。您可以使用命令行选项来控制它(请参阅 Arg
模块的文档)。
let debug = ref false
...
if !debug (* i.e. debug's value is true *) then
printf ...;
在 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 语句?
你可以使用 cppo : https://github.com/mjambon/cppo。 这可通过 opam 获得,并提供类似 C 的预处理器功能。
无需预处理,您只需将全局标志定义为 let debug = true
并写入:
if debug then printf ...;
如果 debug
为假,ocamlopt 将删除此代码。也就是说,它很麻烦,只能在生产代码的性能至关重要的情况下使用。
另一个不太优化的选项是有一个可变标志。这更方便,因为您不必重建程序来激活或停用调试日志记录。您可以使用命令行选项来控制它(请参阅 Arg
模块的文档)。
let debug = ref false ... if !debug (* i.e. debug's value is true *) then printf ...;