Partilhar via


Diretivas do compilador

Este tópico descreve diretivas de processador e diretivas de compilador.

Para diretivas F# Interactive (dotnet fsi), consulte Programação interativa com F#.

Diretivas de pré-processador

Uma diretiva de pré-processador é prefixada com o símbolo # e aparece em uma linha por si só. Ele é interpretado pelo pré-processador, que é executado antes do próprio compilador.

A tabela a seguir lista as diretivas de pré-processador disponíveis em F#.

Diretiva Description
#ifsímbolo Suporta compilação condicional. Código na seção após o #if é incluído se o símbolo estiver definido. O símbolo também pode ser negado com !.
#else Suporta compilação condicional. Marca uma seção de código a ser incluída se o símbolo usado com o anterior #if não estiver definido.
#endif Suporta compilação condicional. Marca o fim de uma seção condicional do código.
#[linha] int,
#[linha] int string,
#[linha] int verbatim-string
Indica a linha do código-fonte original e o nome do arquivo, para depuração. Esse recurso é fornecido para ferramentas que geram código-fonte F#.
#nowarncódigo de advertência Desativa um aviso ou avisos do compilador. Para desativar um aviso, localize seu número na saída do compilador e inclua-o entre aspas. Omita o prefixo "FS". Para desativar vários números de aviso na mesma linha, inclua cada número entre aspas e separe cada cadeia de caracteres por um espaço.
Por exemplo: #nowarn "9" "40"

O efeito da desativação de um aviso aplica-se a todo o ficheiro, incluindo partes do ficheiro que precedem a diretiva.|

Diretivas de compilação condicional

O código desativado por uma dessas diretivas aparece esmaecido no Editor de Códigos do Visual Studio.

Nota

O comportamento das diretivas de compilação condicional não é o mesmo que em outros idiomas. Por exemplo, você não pode usar expressões booleanas envolvendo símbolos, e true false não tem nenhum significado especial. Os símbolos que você usa na if diretiva devem ser definidos pela linha de comando ou nas configurações do projeto, não há nenhuma define diretiva de pré-processador.

O código a seguir ilustra o uso das #ifdiretivas , #elsee #endif . Neste exemplo, o código contém duas versões da definição de function1. Quando VERSION1 é definido usando a opção de compilador -define, o código entre a #if diretiva e a #else diretiva é ativado. Caso contrário, o código entre #else e #endif é ativado.

#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

Não há nenhuma #define diretiva de pré-processador em F#. Você deve usar a opção do compilador ou as configurações do projeto para definir os símbolos usados pela #if diretiva.

As diretivas de compilação condicional podem ser aninhadas. O recuo não é significativo para diretivas de pré-processador.

Você também pode negar um símbolo com !. Neste exemplo, o valor de uma cadeia de caracteres é algo somente quando não está depurando:

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

Diretivas de linha

Ao criar, o compilador relata erros no código F# fazendo referência a números de linha nos quais cada erro ocorre. Esses números de linha começam em 1 para a primeira linha de um arquivo. No entanto, se você estiver gerando código-fonte F# de outra ferramenta, os números de linha no código gerado geralmente não são de interesse, porque os erros no código F# gerado provavelmente surgem de outra fonte. A #line diretiva fornece uma maneira para os autores de ferramentas que geram código-fonte F# para passar informações sobre os números de linha originais e arquivos de origem para o código F# gerado.

Quando você usa a diretiva, os #line nomes de arquivo devem ser colocados entre aspas. A menos que o token literal (@) apareça na frente da cadeia de caracteres, você deve escapar dos caracteres de barra invertida usando dois caracteres de barra invertida em vez de um para usá-los no caminho. A seguir estão os tokens de linha válidos. Nesses exemplos, suponha que o arquivo Script1 original resulta em um arquivo de código F# gerado automaticamente quando ele é executado por meio de uma ferramenta e que o código no local dessas diretivas é gerado a partir de alguns tokens na linha 25 no arquivo Script1.

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

Esses tokens indicam que o código F# gerado neste local é derivado de algumas construções em ou perto da linha 25 em Script1.

Consulte também