18. Incluir código propio

Código propio

La idea es incorporar código que hayan hecho otros usuarios poniendo el mismo en un  archivo. Ejemplo programador A quiere usar lo que el programador B hizo, lo que debe hacer es utilizar la directiva de pre-procesador del compilador #include "archivo.h", veamos un ejemplo.

Para el caso del programa principal sería:


Si el archivo suma.h que está en el mismo directorio, se vería:


Como vemos esto mas que una librería es una manera de usar el código ubicado en otro archivo.

Suele o puede ocurrir un error en otra situación. Supongamos que el Programador A incluye el código del Programador B y del programador C, pero resulta que el programador B, también usaba el código del programador C, y para ello ya había incluido el código de C en B.

Si esto sucede al tratar de compilar usando el #include "archivo.h" va a indicar un cartel con el error de "doble inclusión", esto es por que el mismo código se incluye dos veces. 

Para evitar esto se recurre a una directiva condicional del pre-procesador del compilador.

Directiva include guard

Para presentar el ejemplo vamos a suponer que el código que se intenta incluir dos veces es una estructura definida en dos lugares.

//Programa C guardado como codigoc.h



//Programa B guardado como codigob.h



//Programa A guardado como codigoa.cpp


Si se compila codigoa.cpp el error que va a tirar es:


Esto sucede por que funcion1 esta declarada en C e incluida dos veces en "codigoa.cpp" una con #include "codigoc.h" y de nuevo de manera indirecta  con #include "codigob.h", digo indirectamente por que en "codigob.h" YA había incluid a funcion1() con el #include "codigoc.h"

Veamos como solucionarlo, SOLO en el archivo "codigoc.h" escribimos:


Las líneas 2,3 y 10 crean lo que se conoce como include guard.

En los lenguajes de programación C y C++, un #include guard, a veces llamado macro guard, header guard o file guard, es una construcción particular que se utiliza para evitar el problema de la doble inclusión cuando se trata de la directiva include. El nombre de include guard no es algo oficial y algunos programadores pueden darle otro nombre.