Espacios de nombres
Variantes
Acciones

Preprocesador

De cppreference.com
< cpp
 
 
Lenguaje C++
Temas generales
Preprocesador
Comentarios
Control de flujo
Instrucciones de ejecución condicionales
Instrucciones de iteración (bucles)
Declaraciones de salto
Funciones
Declaración de funciones
Declaración de funciones lambda
Especificador inline
Especificación de excepciones(hasta C++20)
Especificador noexcept(C++11)
Excepciones
Espacios de nombres
Tipos
Especificadores
decltype(C++11)
auto(C++11)
alignas(C++11)
Especificadores de duración de almacenamiento
Inicialización
Expresiones
Representaciones alternas
Literales
Booleanos - Enteros - De punto flotante
De carácter - De cadena - nullptr(C++11)
Definidos por el usuario(C++11)
Utilidades
Atributos(C++11)
Tipos
Declaración de typedef
Declaración de alias de tipo(C++11)
Conversiones
Conversiones implícitas - Conversiones explícitas
static_cast - dynamic_cast
const_cast - reinterpret_cast
Asignación de memoria
Clases
Propiedades de funciones específicas de la clase
Funciones miembro especiales
Plantillas
Misceláneos
 
 

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.

Contenido

[editar]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 módulo e importación también son directivas de preprocesamiento.

(desde C++20)

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

[editar]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 #includey 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:

[editar]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.

[editar]Véase también

Documentación de C++ para Símbolos de macro predefinidos
Documentación de C++ para Índice de símbolos de macro
Documentación de C para preprocesador
close