Preprocesador
De cppreference.com
< cpp
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
#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:
- Comportamiento definido por la implementación (controlado por la directiva
#pragma
y el operador_Pragma
(desde C++11)). Además, algunos compiladores soportan (en varios grados) el operador__pragma
como una extensión no estándar. - Nombre de archivo e información de línea disponible para el preprocesador (controlado por la directiva
#line
).
[editar]Notas
- ↑É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 |