2010-09-01 100 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;;