2010-09-01 3 views
5

Предположим, у меня есть длинный алгоритм, который я хотел бы быть необязательным для его отладки. До сих пор я просто добавил много if verbose then printf "whatever" вокруг кода, но это заставляет код выполнять множество бесполезных тестов, если я не хочу иметь его в подробном режиме.Условная компиляция в OCaml

Есть ли способ получить простую условную компиляцию, которая может просто игнорировать строки printf, если установлен флаг?

Что-то, что, например, я могу сделать в C помощью #IFDEF DEBUG printf .. #ENDIF

ответ

7

То, что вы ищете, можно найти в camlp4. Если включить предопределенные макросы, то вы можете определить флаги в командной строке с помощью опции -D (и -U для UNDEF их):

camlp4o pa_macro.cmo -DFOO file.ml 

В коде это выглядит следующим образом:

let f x = IFDEF FOO THEN x + 1 ELSE x - 1 END;;