Directivas de preprocesador C/C++ | conjunto 2

Principios básicos de las directivas de preprocesador de C/C++ Directivas de preprocesador: en casi todos los programas que encontramos en C/C++, vemos algunas líneas en la parte superior del programa precedidas por un signo de almohadilla (#). El compilador procesa previamente estas líneas antes de que comience la compilación real. El final de estas líneas se identifica con el carácter de nueva línea ‘\n’, sin punto y coma ‘;’ es necesario para terminar estas líneas. Las directivas de preprocesador se utilizan principalmente para definir macros, evaluar declaraciones condicionales, inclusión de archivos fuente, directiva pragma, control de línea, detección de errores, etc. En esta publicación, discutiremos algunos tipos más de directivas de preprocesador que se detallan a continuación:

  1. compilación condicional
  2. línea de control
  3. directiva de error

Ahora echemos un vistazo a cada una de estas directivas en detalle:

  • Compilación condicional : las directivas de compilación condicional ayudan a compilar una parte específica del programa o nos permiten omitir la compilación de alguna parte específica del programa en función de algunas condiciones. En nuestro artículo anterior , hemos discutido acerca de dos de estas directivas ‘ ifdef ‘ y ‘ endif ‘. En esta publicación discutiremos #ifndef , #if , #else y #elif .
    1. #ifdef : esta directiva es la directiva condicional más simple. Este bloque se llama grupo condicional. El texto controlado se incluirá en la salida del preprocesador si se define el macronombre. El texto controlado dentro de un condicional incluirá directivas de preprocesamiento. Se ejecutan solo si el condicional tiene éxito. Puede anidarlos en varias capas, pero deben estar completamente anidados. En otras palabras, ‘#endif’ siempre coincide con el ‘#ifdef’ más cercano (o ‘#ifndef’ o ‘#if’). Además, no puede comenzar un grupo condicional en un archivo y terminarlo en otro. Sintaxis:
#ifdef MACRO
    controlled text
#endif /* macroname */
  1. #ifndef : sabemos que la directiva in #ifdef si se define el nombre de la macro, entonces el bloque de declaraciones que sigue a la directiva #ifdef se ejecutará normalmente, pero si no está definido, el compilador simplemente omitirá este bloque de declaraciones. La directiva #ifndef es simplemente opuesta a la de la directiva #ifdef. En el caso de #ifndef , el bloque de sentencias entre #ifndef y #endif se ejecutará solo si la macro o el identificador con #ifndef no está definido. Sintaxis:
ifndef macro_name
    statement1;
    statement2;
    statement3;
    .
    .
    .
    statementN;
endif
  1. Si la macro con el nombre ‘macroname’ no se define mediante la directiva #define, solo se ejecutará el bloque de instrucciones.
  2. #if, #else y #elif : estas directivas funcionan juntas y controlan la compilación de partes del programa usando algunas condiciones. Si la condición con la directiva #if se evalúa como un valor distinto de cero, entonces el grupo de líneas inmediatamente después de la directiva #if se ejecutará; de lo contrario, si la condición con la directiva #elif se evalúa como un valor distinto de cero, entonces el grupo de líneas inmediatamente después de que se ejecute la directiva #elif; de lo contrario, se ejecutarán las líneas posteriores a la directiva #else. Sintaxis:
#if macro_condition
   statements
#elif macro_condition
   statements
#else
   statements
#endif
  1. Ejemplo: 

CPP

#include<iostream>
 
#define gfg 7
  
#if gfg > 200
   #undef gfg
   #define gfg 200
#elif gfg < 50
   #undef gfg
   #define gfg 50
#else
   #undef gfg
   #define gfg 100
#endif
 
int main()
{
    std::cout << gfg;  // gfg = 50
}   
  1. Producción:
50
  1. Observe cómo toda la estructura de las directivas enstringdas #if, #elif y #else termina con #endif.
  • Control de línea (#line) : Siempre que compilamos un programa, hay posibilidades de que ocurra algún error en el programa. Cada vez que el compilador identifica un error en el programa, nos proporciona el nombre del archivo en el que se encuentra el error junto con la lista de líneas y los números de línea exactos donde se encuentra el error. Esto nos facilita encontrar y corregir el error. Sin embargo, podemos controlar qué información debe proporcionar el compilador durante los errores de compilación usando la directiva #line. Sintaxis:
#line number "filename"
  • número : número de línea que se asignará a la siguiente línea de código. Los números de línea de las líneas sucesivas se incrementarán uno a uno a partir de este momento. “nombre de archivo” – parámetro opcional que permite redefinir el nombre del archivo que se mostrará.
  • Directiva de error (#error) : esta directiva aborta el proceso de compilación cuando se encuentra en el programa durante la compilación y produce un error que es opcional y se puede especificar como un parámetro. Sintaxis:
#error optional_error
  • Aquí, option_error es cualquier error especificado por el usuario que se mostrará cuando se encuentre este derective en el programa. Ejemplo: 

CPP

#ifndef GeeksforGeeks
#error GeeksforGeeks not found !
#endif 
  • Producción:
error: #error GeeksforGeeks not found !

Referencias:

Este artículo es una contribución de Amartya Ranjan Saikia y Harsh Agarwal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *