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

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

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

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

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

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

Директива Description
#ifСимвол Поддерживает условную компиляцию. Код в разделе после #if включения, если определен символ . Символ также можно отрицать с !помощью .
#else Поддерживает условную компиляцию. Помечает раздел кода, который следует включить, если символ, используемый с предыдущей директивой #if, не определен.
#endif Поддерживает условную компиляцию. Помечает конец условного раздела кода.
#[строка] int,
#[строка] intstring,
#[строка] intverbatim-string
Указывает исходную строку кода и имя файла для отладки. Эта возможность предназначена для средств, создающих исходный код 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.

См. также