◐ Shell
clean mode source ↗

Preprocesador - cppreference.com

De cppreference.com

El preprocesador se ejecuta en la fase 4 de traducción, antes comenzar la compilación. El resultado del preprocesamiento es un único archivo que después se pasa al compilador propiamente dicho.

Directivas

Las directivas de preprocesamiento controlan el comportamiento del preprocesador. Cada directiva ocupa una línea y tiene el siguiente formato:

  • el carácter #;
  • instrucción de preprocesamiento (una de las siguientes: define, undef, include, if, ifdef, ifndef, else, elif, elifdef, elifndef (desde C++23), endif, line, error, pragma);[1]
  • argumentos (dependen de la instrucción);
  • salto de línea.

La directiva nula (# seguido por un salto de línea) está permitida y no tiene ningún efecto.

Las directivas de preprocesamiento no deben de venir de una expansión de macro.

#define VACIO
VACIO   #   include <file.h> // no es una directiva de preprocesamiento

Funcionalidades

El preprocesador tiene la capacidad de modificar archivos fuentes antes de la compilación:

  • Compilar condicionalmente partes del archivo fuente (controlado por las directivas #if, #ifdef, #ifndef, #else, #elif, #elifdef, #elifndef (desde C++23) y #endif).
  • Reemplazar macros de texto, con la posibilidad de concatenar o entrecomillar identificadores (controlado por las directivas #define y #undef, y los operadores # y ##).
  • Incluir otros archivos (controlado por la directiva #include y comprobar la inclusión con la directiva __has_include (desde C++17)
  • Causar un error (controlado por la directiva #error).

Se pueden controlar los siguientes aspectos del preprocesador:

Notas

  1. Éstas son las directivas definidas por el estándar. El estándar no define el comportamiento de otras directivas: podrían ser ignoradas, tener algún significado útil, o causar un error de tiempo de compilación. Incluso si son ignoradas, se eliminan del código fuente cuando termina el preprocesamiento. Una extensión común no estándar es la directiva #warning, que emite un mensaje definido por el usuario durante la compilación.

Véase también