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
#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).
[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 de preprocesador
|

