Salida del preprocesador del archivo cpp

El preprocesamiento es una etapa en la que las directivas del preprocesador se expanden o procesan antes de enviar el código fuente al compilador. El ejemplo más común de dicha directiva es #include o #define . Una salida de preprocesador tiene la extensión «.i» .

Aquí se crean dos archivos:

C++

// C++ program for the test.cpp
#include "MyHeader.h"
#include <iostream>
using namespace std;
#define VAL 9
  
// Driver Code
int main()
{
    // powerOfTwo function is defined
    // in “MyHeader.h”
    cout << powerOfTwo(VAL) << endl;
  
    return 0;
}

MyHeader.h

// Below is code for the header file
// named as "MyHeader.h"
#pragma once
  
// Function to find the value of 2^x
size_t powerOfTwo(const int x)
{
  
    // return the value
    return 1 << x;
}

Ahora, en el símbolo del sistema, la salida se puede preprocesar de dos maneras:

Método 1: dentro de cmd.exe : no se recomienda este método.

g++ -E test.cpp

Aquí, la salida no se puede mostrar ya que el archivo de encabezado iostream se expandirá hasta 50000 líneas. Esto imprimirá todos los datos en el símbolo del sistema, lo que puede demorar unos minutos ya que cout es bastante lento en la impresión. Presione cualquier tecla para detener la impresión en el aviso. El símbolo del sistema no conserva las 50000 líneas. Tiene sus propios límites después de los cuales no se pueden ver las salidas anteriores.

Método 2: cree un archivo explícito «.i» :

Use el comando dado a continuación para obtener hello.i

g++ -E test.cpp -o hello.i

Producción:

Explicación: En el resultado anterior, solo hay 26000 líneas. Es normal ya que iostream es un archivo de encabezado grande y también incluye muchos otros archivos de encabezado que incluyen otros. La directiva #include solo copia el contenido de los respectivos archivos de encabezado.
Como se notó, el programa real se encuentra al final en 26527 líneas pero aún así, da mensajes de error para la línea correcta. Además, todo el contenido de varios archivos se envuelve en hello.i pero aún se reciben mensajes de error para el contexto de archivo correcto.

¿Cómo sucede esto ?

# 7 "MyHeader.h"

Esta es la directiva de control de línea. Le dirá al compilador que la siguiente línea es la séptima línea en el archivo MyHeader.h . Si se ejecuta el código anterior, entonces la función powerOfTwo() se define en la línea número 7. Además, la macro VAL se reemplaza completamente por 9.

Pocas cosas interesantes :

  • El archivo de salida del preprocesador se puede compilar con el siguiente comando:
g++ hello.i -o test.exe
  • Preprocesamiento de la directiva include:
// test.cpp
#include<iostream>

int main(){
  std::cout << "GeekForGeeks" << std::endl
  #include"MyHeader.h"
}
// MyHeader.h
;

En el ejemplo anterior, el punto y coma se copia y pega desde MyHeader.h a la línea junto a la instrucción cout mediante la directiva #include . Por lo tanto, no se generará ningún error aquí. Además, Myheader.h puede ser un archivo de texto, un archivo python o un archivo HTML sin importar qué, #include simplemente lo copiará.

Publicación traducida automáticamente

Artículo escrito por mohdatishanx 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 *