Usina BRAdvPL Guia
Entrar
← Todos os tópicos
FUNDAMENTOPublicado

Diretivas de compilação no AdvPL

#define · #undef · #include · #ifdef · #ifndef · #else · #endif · #command · #translate

Controle o pré-processamento, compartilhe definições e escolha quais trechos serão enviados ao compilador.

Pré-processadorCompilaçãoIncludesConstantesCompilação condicional
01 · VISÃO GERAL

Visão geral

Diretivas são instruções executadas pelo pré-processador antes da compilação. Uma analogia útil é preparar uma receita antes de levá-la ao forno: o pré-processador inclui cabeçalhos, expande símbolos, traduz sintaxe e escolhe blocos; o compilador recebe apenas o resultado dessas decisões. Para quem conhece C/C++, #define e #include têm origem conceitual semelhante, mas não se deve equiparar #include a sistemas modernos completos de módulos.

02 · SINTAXE

Sintaxe

#define · #undef · #include · #ifdef · #ifndef · #else · #endif · #command · #translate

Parâmetros

#define
DiretivaOpcional

Define identificadores, constantes manifestas ou pseudofunções substituídas pelo pré-processador.

#undef
DiretivaOpcional

Remove uma definição ativa a partir do ponto onde a diretiva aparece.

#include
DiretivaOpcional

Insere no ponto atual o conteúdo de um arquivo de cabeçalho localizado no caminho de includes da compilação.

#ifdef
DiretivaOpcional

Inclui um trecho na compilação somente quando determinado identificador estiver definido.

#ifndef
DiretivaOpcional

Inclui um trecho somente quando determinado identificador ainda não estiver definido.

#else e #endif
DiretivaOpcional

Define o caminho alternativo e encerra blocos de compilação condicional.

#command e #translate
DiretivaOpcional

Cria regras de transformação sintática aplicadas pelo pré-processador.

03 · EXEMPLO PRÁTICO

Constante e compilação condicional

#define LIMITE_ITENS 100
#define LOG_DETALHADO

User Function ExDiretivas()
    Local nItens := 120

#ifdef LOG_DETALHADO
    ConOut("Itens recebidos: " + CValToChar(nItens))
#endif

    If nItens > LIMITE_ITENS
        MsgAlert("Limite excedido")
    EndIf
Return
Resultado esperado

Os símbolos são resolvidos antes da compilação; o If continua sendo uma decisão em execução.

04 · EXEMPLO PRÁTICO

Valor padrão com #ifndef

#ifndef TAMANHO_LOTE
    #define TAMANHO_LOTE 50
#endif

User Function ExLote()
    ConOut("Tamanho do lote: " + CValToChar(TAMANHO_LOTE))
Return
Resultado esperado

O valor padrão é usado somente quando o símbolo não foi definido anteriormente.

05 · EXEMPLO PRÁTICO

Include específico

#include "TOTVS.ch"
#include "FWMVCDef.ch"

User Function ExCabecalhos()
    // Utilize símbolos do Framework MVC somente após incluir
    // o cabeçalho compatível com o ambiente.
Return
Resultado esperado

O conteúdo dos cabeçalhos participa do pré-processamento do fonte.

BOAS PRÁTICAS
  • Diretivas são processadas antes da execução; If/Else, por outro lado, decide caminhos enquanto a rotina está sendo executada.
  • Use constantes manifestas para eliminar valores mágicos, compilação condicional para compatibilidade necessária e includes compatíveis com o release.
  • Para configuração que precisa mudar em produção sem recompilar, prefira parâmetros ou outra fonte de configuração em tempo de execução.
  • #command e #translate são recursos avançados; em código de aplicação, clareza costuma ser mais importante que criar nova sintaxe.
ARMADILHAS COMUNS
  • Não coloque segredos em #define: a expansão fará parte do material compilado e do processo de desenvolvimento.
  • Evite usar símbolos de compilação para diferenciar clientes quando parametrização ou extensão desacoplada resolverem o problema.
  • Não presuma que todo fonte precise de PROTHEUS.CH e TOTVS.CH simultaneamente; inclua o necessário para o framework e release.
  • Não atribua a #command funções existentes da biblioteca: AAdd(), por exemplo, é uma função AdvPL.

Conteúdos relacionados

REFERÊNCIAS
  1. TOTVS. #define. TDN. Última alteração em 22 mar. 2019.
  2. TOTVS. Diretivas para o compilador. TDN.
  3. TOTVS. #ifdef. TDN.
  4. TOTVS. #ifndef. TDN.
  5. TOTVS. #include. TDN.
  6. TOTVS. #undef. TDN.
Situação
Publicado
Página criada em
Última revisão em
Idioma original
Português
Revisão
Usina.BR