Diretivas de compilador
Este tópico descreve diretivas de processador e diretivas de compilador.
Para diretivas F# interativas (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 sozinha. Ela é interpretada pelo pré-processador, que é executado antes do próprio compilador.
A tabela a seguir lista as diretivas de pré-processador disponíveis no F#.
Diretiva | Descrição |
---|---|
#if símbolo |
Suporte à compilação condicional. O 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 |
Suporte à compilação condicional. Marca uma seção de código a ser incluída se o símbolo usado com o #if anterior não estiver definido. |
#endif |
Suporte à compilação condicional. Marca o final de uma seção condicional do código. |
# [line] int,# [linha] intstring,# [linha] intverbatim-string |
Indica a linha de código-fonte original e o nome do arquivo, para depuração. Esse recurso é fornecido para ferramentas que geram código-fonte em F#. |
#nowarn código de advertência |
Desabilita um aviso ou avisos do compilador. Para desabilitar vários números de aviso na mesma linha, separe cada cadeia de caracteres por um espaço. Por exemplo: #nowarn 9 42 |
O efeito de desabilitar um aviso se aplica ao arquivo inteiro, incluindo partes do arquivo que precedem a diretiva.|
Diretivas de compilação condicional
O código desativado por uma dessas diretivas aparece esmaecido no Visual Studio Code Editor.
Observação
O comportamento das diretivas de compilação condicional não é o mesmo que em outras linguagens. Por exemplo, você não pode usar expressões booleanas envolvendo símbolos, e true
e false
não têm significado especial. Os símbolos que você usa na diretiva if
devem ser definidos pela linha de comando ou nas configurações do projeto; não há diretiva de pré-processador define
.
O código a seguir ilustra o uso das diretivas #if
, #else
e #endif
. Neste exemplo, o código contém duas versões da definição de function1
. Quando VERSION1
é definido usando a opção -define do compilador, o código entre a diretiva #if
e a diretiva #else
é 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á diretiva de pré-processador #define
em F#. Você deve usar a opção do compilador ou as configurações do projeto para definir os símbolos usados pela diretiva #if
.
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 estiver depurando:
#if !DEBUG
let str = "Not debugging!"
#else
let str = "Debugging!"
#endif
Diretivas de linha
Ao compilar, o compilador relata erros no código F# referenciando os números de linha em que cada erro ocorre. Esses números de linha começam em 1 para a primeira linha em 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 diretiva #line
fornece uma maneira para os autores de ferramentas que geram código-fonte F# passarem informações sobre os números de linha originais e os arquivos-fonte para o código F# gerado.
Ao usar a diretiva #line
, os nomes dos arquivos devem ser colocados entre aspas. A menos que o token literal (@
) apareça na frente da cadeia de caracteres, você deve escapar 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. Nestes exemplos, suponha que o arquivo original Script1
resulte em um arquivo de código F# gerado automaticamente quando executado por meio de uma ferramenta e que o código no local dessas diretivas seja gerado a partir de alguns tokens na linha 25 do 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 na ou próximo à linha 25
em Script1
.