Компиляция кодирует для сборки конечных версий в D

Есть ли какой-либо механизм в D (D2), чтобы вынудить код быть скомпилированным во время сборки конечных версий?

В C у Вас могло бы быть что-то как

#ifndef NDEBUG
/*Something that will only run in a debug build*/
#endif

Я знаю, что D имеет

debug(mymodule) {
   //Do something
}

Но это требует, чтобы пользователь для передачи - отладил, чтобы каждый модуль включил его.

Я ищу глобальный механизм, который будет всегда выполнять код в нормальной сборке, но компилировать его, когда Вы передадите - флаг выпуска. Я знаю, что некоторые созданные-ins имеют эту способность (например, утверждайте), но есть ли какой-либо путь к пользовательскому коду, чтобы сделать это также?

7
задан JRM 6 July 2010 в 22:56
поделиться

3 ответа

Существует глобальное понятие отладки. Просто напишите:

debug {
    ... code ...
}
15
ответ дан 6 December 2019 в 09:58
поделиться

dmd -release -version = dist module.d

и

version(dist) {} else {
    int i = 9;
}

Лучшее, что я могу придумать.

[обновление]

Лично я считаю, что приведенный выше ответ «плохой». Вышеупомянутое решение внесло бы слишком сложную логику в процесс выпуска, который, я думаю, должен быть прямым и предсказуемым . Я бы рекомендовал просто использовать -debug и debug {// ...} . Даже если вы чувствуете, что можете забыть добавить флаг отладки при компиляции - вы просто разрабатываете! - ошибки обходятся дешево. Ошибки, попадающие в релиз, еще хуже.

3
ответ дан 6 December 2019 в 09:58
поделиться

Если лучшего ответа не найдено, должен сработать такой обходной путь: bool debugMode() { bool res; assert(!!(res = true)); return res; }

1
ответ дан 6 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: