2015-11-24 67 views
3

在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語句時不處於調試模式?

回答

3

沒有預處理,你可以簡單地定義了爲let debug = true和寫一個全局標誌:

 
if debug then 
    printf ...; 

此代碼是由ocamlopt刪除,如果debug是假的。也就是說,這很麻煩,只有在生產代碼的性能至關重要的情況下才能使用。

另一個較少優化的選項是有一個可變標誌。這樣更方便,因爲您不必重新構建程序來激活或取消激活調試日誌記錄。您可以使用命令行選項來控制此選項(請參閱Arg模塊的文檔)。

 
let debug = ref false 

... 

if !debug (* i.e. debug's value is true *) then 
    printf ...;