Есть ли какой-либо механизм в D (D2), чтобы вынудить код быть скомпилированным во время сборки конечных версий?
В C у Вас могло бы быть что-то как
#ifndef NDEBUG
/*Something that will only run in a debug build*/
#endif
Я знаю, что D имеет
debug(mymodule) {
//Do something
}
Но это требует, чтобы пользователь для передачи - отладил, чтобы каждый модуль включил его.
Я ищу глобальный механизм, который будет всегда выполнять код в нормальной сборке, но компилировать его, когда Вы передадите - флаг выпуска. Я знаю, что некоторые созданные-ins имеют эту способность (например, утверждайте), но есть ли какой-либо путь к пользовательскому коду, чтобы сделать это также?
Существует глобальное понятие отладки. Просто напишите:
debug {
... code ...
}
dmd -release -version = dist module.d
и
version(dist) {} else {
int i = 9;
}
Лучшее, что я могу придумать.
[обновление]
Лично я считаю, что приведенный выше ответ «плохой». Вышеупомянутое решение внесло бы слишком сложную логику в процесс выпуска, который, я думаю, должен быть прямым и предсказуемым . Я бы рекомендовал просто использовать -debug
и debug {// ...}
. Даже если вы чувствуете, что можете забыть добавить флаг отладки при компиляции - вы просто разрабатываете! - ошибки обходятся дешево. Ошибки, попадающие в релиз, еще хуже.
Если лучшего ответа не найдено, должен сработать такой обходной путь: bool debugMode() { bool res; assert(!!(res = true)); return res; }