Лоскутов И.В. Опции компилятора

Несмотря на то, что в официальной документации заявлено, что компилятор не имеет опций компиляции, на самом деле эти опции есть, и также есть средства, которые позволяют управлять этими опциями. Итак, имеются следующие опции компиляции:

Опция Описание
checks добавить в исполняемый модуль (*.EXE или *.DLL) код, выполняющий основные проверки.
allchecks добавить в исполняемый модуль код, выполняющий дополнительные проверки (переполнение и выход за диапазон значений для целых чисел).
assert добавить в исполняемый модуль код, предусмотренный операторами ASSERT().
obj создавать объектный файл.
ref
allref
srcpos
hint
oberon включить поддержку некоторых элементов языка Оберон, в частности тип LONGREAL и символ «D» в вещественных константах.
errorTrap

В модуле DevCompiler определены также опции reallib и signatures, но они не реализованы и здесь не рассматриваются.

По умолчанию включены опции: checks, assert, obj, ref, allref, srcpos.

Для управления опциями служит строка опций, которая представляет собой последовательность символов. Перед компиляцией компилятор сначала включает опции по умолчанию, затем, последовательно обрабатывая символы в строке опций, изменяет состав включенных опций. Порядок символов в строке опций не имеет значения. Определены следующие управляющие символы:

Символ Действие
«-» последовательно выключает опцию srcpos, либо allref, либо ref, либо obj
«!» последовательно выключает опцию assert, либо checks
«+» включает опцию allchecks
«?» включает опцию hint
«@» включает опцию errorTrap
«$» включает опцию oberon

Символы «-» и «!» могут иметь несколько вхождений в строке опций. Причём, каждое новое вхождение выключает следующую опцию из списка, который определён для этих символов.

Например, для того чтобы выключить опцию checks и включить опцию hint, мы должны указать компилятору вот такую строку опций: «!!?». Первое вхождение символа «!» отключит опцию assert, второе вхождение символа «!» отключит опцию checks, и, наконец, символ «?» включит опцию hint. Как видим, при такой системе невозможно отключить опцию checks, не отключив при этом assert. И в этом есть определённый смысл.

Строка опций может быть передана в качестве параметра процедуре DevCompiler.CompileOpt(), а также может быть указана в списке модулей компиляции непосредственно после имени модуля.

Следует иметь в виду, что некоторые опции, отключенные по умолчанию, могут быть реализованы некорректно, и их следует использовать осмотрительно.

© 2005-2024 OberonCore и коллектив авторов.