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.
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
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
#definey#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:
- Comportamiento definido por la implementación (controlado por la directiva
#pragmay el operador_Pragma(desde C++11)). Además, algunos compiladores soportan (en varios grados) el operador__pragmacomo una extensión no estándar. - Nombre de archivo e información de línea disponible para el preprocesador (controlado por la directiva
#line).
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.
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
|