Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Preprocesador de c

Estas en el tema de Preprocesador de c en el foro de C/C++ en Foros del Web. Hola, aun no tengo muy claro para que me puede servir esto: #ifndef _HOLA_ #define _HOLA_ #endif si yo agrego otro encabezado como hello.h y ...
  #1 (permalink)  
Antiguo 12/08/2010, 11:59
 
Fecha de Ingreso: agosto-2010
Mensajes: 153
Antigüedad: 13 años, 7 meses
Puntos: 1
Preprocesador de c

Hola, aun no tengo muy claro para que me puede servir esto:

#ifndef _HOLA_
#define _HOLA_
#endif

si yo agrego otro encabezado como hello.h y dentro de ese encabezado tengo el encabezado hola.h ya definido, supongo que con esta condicion ya no se compilaria dos veces verdad?? osea que el linkeador busca el archivo primero antes de definirlo verdad??
gracias

Última edición por davidtadeo; 12/08/2010 a las 12:06
  #2 (permalink)  
Antiguo 17/08/2010, 12:03
Avatar de calambrenet  
Fecha de Ingreso: julio-2010
Ubicación: Jaén
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 18
Respuesta: Preprocesador de c

Mejor explicarlo con un ejemplo:
Imagina que tienes un programa con un fichero principal "main.c"

main.c
Código:
#include <stdio.h>
#include "llamar_adios.h"

int main(void)
{
  printf("hola\n");
  llamar_adios();

  return 0;
}
Ahora creamos un fichero aparte donde creamos la función "llamar_adios()"

llamar_adios.c
Código:
#include <stdio.h>
#include "llamar_adios.h"

void llamar_adios(void)
{
  printf("Adios nenitas\n");
}
Ahora para que main pueda usar ésta función tenemos que crear un fichero header donde declararla. Pero cuando compilemos el proyecto, el fichero "llamar_adios.h" se compilará dos veces porque esta incluido en dos ficheros c. Lo ideal es que se lea una vez y lo ingnore la segunda. Para eso se usa el sistema del preprocesador:

llamar_adios.h
Código:
#ifndef _LLAMAR_ADIOS_H_    //si no está declarada esta constante...
#define _LLAMAR_ADIOS_H_    //pues la definimos 

void llamar_adios(void);    //y declaramos la función

#endif                //fin. La proxima vez que lea este fichero, todo esto lo ingnorará porque la constante _LLAMAR_ADIOS_H_ está declarada.
¿Te has enterado? fácil no?

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:30.