Usina BRGuía AdvPL
Ingresar
← Todos los temas
FUNDAMENTOPublicado

Directivas de compilación en AdvPL

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

Controla el preprocesamiento, comparte definiciones y selecciona qué bloques llegan al compilador.

PreprocesadorCompilaciónIncludesConstantesCompilación condicional
01 · DESCRIPCIÓN GENERAL

Descripción general

Las directivas se procesan antes de compilar. Una analogía útil es preparar una receta antes del horno: se incluyen cabeceras, se expanden símbolos, se traduce sintaxis y se seleccionan bloques; el compilador recibe el resultado. #define y #include son conceptualmente similares a C/C++, pero #include no es un sistema moderno completo de módulos.

02 · SINTAXIS

Sintaxis

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

Parámetros

#define
DiretivaOpcional

Define identificadores, constantes manifiestas o pseudofunciones expandidas por el preprocesador.

#undef
DiretivaOpcional

Elimina una definición activa desde el punto donde aparece la directiva.

#include
DiretivaOpcional

Inserta un archivo de cabecera en el punto actual usando la ruta de includes.

#ifdef
DiretivaOpcional

Incluye un bloque en la compilación solo cuando un identificador está definido.

#ifndef
DiretivaOpcional

Incluye un bloque solo cuando un identificador todavía no está definido.

#else e #endif
DiretivaOpcional

Define la alternativa y cierra bloques de compilación condicional.

#command e #translate
DiretivaOpcional

Crea reglas de transformación sintáctica aplicadas por el preprocesador.

03 · EJEMPLO PRÁCTICO

Constante y compilación 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

Los símbolos se resuelven antes de compilar; If continúa siendo una decisión en ejecución.

04 · EJEMPLO PRÁCTICO

Valor predeterminado con #ifndef

#ifndef TAMANHO_LOTE
    #define TAMANHO_LOTE 50
#endif

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

El valor se usa solo si no existe una definición anterior.

05 · EJEMPLO PRÁCTICO

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

El contenido de las cabeceras participa en el preprocesamiento.

BUENAS PRÁCTICAS
  • Las directivas actúan antes de ejecutar; If/Else decide mientras la rutina corre.
  • Usa constantes manifiestas para evitar valores mágicos, compilación condicional solo cuando sea necesaria e includes compatibles.
  • Usa configuración en ejecución para valores que deban cambiar sin recompilar.
  • #command y #translate son avanzados; la claridad suele ser más importante que una nueva sintaxis.
ERRORES COMUNES
  • No pongas secretos en #define.
  • Evita símbolos por cliente si los parámetros o extensiones resuelven el problema.
  • No supongas que todo fuente necesita PROTHEUS.CH y TOTVS.CH.
  • AAdd() es una función de biblioteca, no una invención de #command.

Contenido relacionado

REFERENCIAS
  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.
Estado
Publicado
Página creada el
Última revisión el
Idioma original
Portugués
Revisión
Usina.BR