Директивы компилятора

В этом разделе описываются директивы процессора и директивы компилятора.

dotnet fsiДирективы F# Interactive () см. в разделе Интерактивное программирование с помощью F #.

Директивы препроцессора

Директива препроцессора дополняется префиксом с символом «#» и отображается в строке сама по себе. Она интерпретируется препроцессором, который запускается перед самим компилятором.

В следующей таблице перечислены директивы препроцессора, имеющиеся в F#.

Директива Описание
#ifсимвол Поддерживает условную компиляцию. Код в разделе после #if включается, если символ определен. Символ также может быть инвертирован с помощью ! .
#else Поддерживает условную компиляцию. Помечает раздел кода, который следует включить, если символ, используемый с предыдущей директивой #if, не определен.
#endif Поддерживает условную компиляцию. Помечает конец условного раздела кода.
#штрих int,
#штрих строка int,
#штрих буквальная строка целого числа
Указывает исходную строку кода и имя файла для отладки. Эта возможность предназначена для средств, создающих исходный код F#.
#nowarnварнингкоде Отключает предупреждение или предупреждения компилятора. Чтобы отключить предупреждение, найдите его номер в выходных данных компилятора и заключите его в кавычки. Не указывайте префикс «FS». Чтобы отключить несколько номеров предупреждений в одной строке, заключите каждый номер в кавычки и отделяйте каждую строку пробелом. Например:

#nowarn "9" "40"

Результат отключения предупреждения применяется ко всему файлу, включая фрагменты файла, предшествующие директиве. |

Директивы условной компиляции

код, деактивируемый одной из этих директив, недоступен в редакторе Visual Studio Code.

Примечание

Поведение директив условной компиляции отличается от их поведения в других языках. Например, нельзя использовать логические выражения с символами, а true и false не имеют особого значения. Символы, используемые в директиве if, должны задаваться с помощью командной строки или в параметрах проекта; в этом языке отсутствует директива препроцессора define.

В следующем коде демонстрируется применение директив #if, #else и #endif. В данном примере код содержит две версии определения function1. Если VERSION1 определяется с помощью параметра компилятора-define, #if активируется код между директивой и #else директивой. В противном случае активируется код между директивами #else и #endif.

#if VERSION1
let function1 x y =
   printfn "x: %d y: %d" x y
   x + 2 * y
#else
let function1 x y =
   printfn "x: %d y: %d" x y
   x - 2*y
#endif

let result = function1 10 20

В языке F# отсутствует директива препроцессора #define. Вы должны использовать параметр компилятора или параметры проекта для определения символов, используемых директивой #if.

Директивы условной компиляции не могут быть вложенными. В директивах препроцессора отступ не важен.

Можно также инвертировать символ с помощью ! . В этом примере значением строки является нечто, только если не выполняется отладка:

#if !DEBUG
let str = "Not debugging!"
#else
let str = "Debugging!"
#endif

Директивы строк

При сборке компилятор сообщает об ошибках в коде F #, ссылаясь на номера строк, в которых возникли ошибки. Номера строк начинаются с 1 для первой строки в файле. Тем не менее при создании исходного кода F# из другого средства номера строк в сформированном коде обычно не представляют интереса, поскольку ошибки в сформированном коде F#, скорее всего, проистекают из другого источника. Директива #line позволяет разработчикам средств, формирующих исходный код F#, передавать сведения о номерах исходных строк и исходных файлах в сформированный код F#.

При использовании директивы #line необходимо заключать имена файлов в кавычки. Если в начале строки не указывается токен verbatim (@), то чтобы использовать в пути символы обратной косой черты, необходимо их экранировать, указывая две обратные косые черты вместо одной. Далее приводятся допустимые токены строк. В этих примерах предполагается, что исходный файл Script1 при запуске в соответствующем средстве приводит к автоматическому созданию файла кода F# и что код в месте расположения этих директив формируется из некоторых токенов в строке 25 файла Script1.

# 25
#line 25
#line 25 "C:\\Projects\\MyProject\\MyProject\\Script1"
#line 25 @"C:\Projects\MyProject\MyProject\Script1"
# 25 @"C:\Projects\MyProject\MyProject\Script1"

Эти токены указывают, что код F#, сформированный в этом месте, является производным от некоторых конструкций в строке 25 или рядом с ней в файле Script1.

См. также