Uma diretiva de compilação é um comentário com uma sintaxe especial, diferenciada, elas podem ser inseridas em qualquer lugar onde é permitido inserir comentários. Uma diretiva de compilação possui um $ logo após a abertura de chaves “{“ seguido do nome da diretiva e possivelmente de parâmetros, dependendo da diretiva.

Temos três tipos de diretivas de compilação:

  • Switch Directives – São diretivas do tipo liga/desliga que possuem os valores On ou Off, que também podem ser definidos como + ou – no caso do uso de diretivas em seu formato curto.
  • Parameter directives – Estas diretivas especificam parâmetros que afetam a compilação como por exemplo nomes de arquivos.
  • Conditional directives – São diretivas que permitem que detemrinados blocos de código sejão compilados ou não, de acordo com a condição definida na diretiva.

Exemplo de uso de diretivas pelo Delphi:

 {$R *.dfm}

Todo formulário que criamos vem com a diretiva acima em seu arquivo .pas. Esta diretiva indica que a o arquivo de resource que conterá os dados dos componentes em design time será um arquivo com mesmo nome da unit porém com a extensão dfm.

Diretivas DEFINE, IFDEF e IF

As diretivas de compilação condicional nos permitem determinar condições para compilação de determinados blocos de código. Isso é muito interessante em projetos legados quando temos um alto grau de acoplamento possuindo units que são compartilhadas entre projetos distintos.

Diretivas de compilação

No exemplo acima podemos observar que a diretiva DEFINE define uma confidional através de um nome, imediatamente abaixo verificamos a mesma através da diretiva IFDEF. Note que apenas o código referente à condição verdadeira foi compilado.

Poderíamos ainda trocar o {$ENDIF} e o {$IFDEF TESTE} por {$ELSE} caso quiséssemos que o segundo código fosse compilado caso a primeira condição fosse falsa:

Diretivas de compilação

Uma outra utilidade que temos de compilação condicional é quando precisamos verificar qual a versão do Delphi.

Diretivas de compilação

No exemplo acima podemos perceber que compilamos o nosso projeto no Delphi 2010, pois esta é a linha que está compilada.

Diretivas Hint e Message

A diretiva HINT nos permite habilitar e desabilitar os hints de compilação que o Delphi nos dá, quando por exemplo declaramos uma variável e não a utilizamos:

Diretivas de compilação
Diretivas de compilação

Temos também a diretiva MESSAGE que nos permite emitir hints, mensagens, erros de compilação.

{$MESSAGE 'Hint'} 
{$Message Hint 'Outro hint'} 
{$messaGe Warn 'Atenção com os finallys'}
{$Message Error 'Recurso não implementado'}
{$Message Fatal 'Necessita revisão'}
Diretivas de compilação
Diretivas de compilação

Diretivas $Region e $J+

As diretivas $Region e $EndRegion nos permitem definir blocos de código visando organizar mais o mesmo:

Diretivas de compilação

Agora veremos como é possível alterar o valor de uma constante, é isso mesmo que você leu, vamos alterar o valor de uma constant.

Quando declaramos uma constante e tentamos alterar o valor da mesma, não conseguimos pois acabamos obtendo o seguinte problema.

Diretivas de compilação

Como podemos ver o Delphi não nos permite atribuir um valor á esta constante. Porém temos a diretiva {$J+} ou {$WRITEABLECONST ON} que nos permite alterar o valor de uma constante.

Diretivas de compilação