Next: El sistema de dependencia
Up: Linux para Programadores
Previous: Programas con un solo
Es interesante poder reutilizar código ya desarrollado en nuevos programas
para crear una biblioteca de funciones. Por ejemplo, sería interesante
disponer de una versión testeada y compilada de nuestra función de inversión de cadenas
y poderla utilizar cuando nos sea necesario, pero sin necesidad de incluir
el código fuente de Reverse(). De esta forma nos ahorraremos espacio
de disco y tiempo de compilación. La solución es trabajar con programas C
multi-módulo. En estos, únicamente un fichero fuente contiene la función
main() que es la función por la que comienzan a ejecutarse el resto
de funciones que hemos usado en nuestro programa. Todas aquellas funciones que
formen parte de la biblioteca deben de escribirse en ficheros separados del fichero
que contenga el main(). Un fichero puede contener más de una función
de biblioteca. En nuestro ejemplo, vamos a crear el fichero de biblioteca llamado
Reverse.c que contendrá la función Reverse(). Este será compilado
creándose un fichero Reverse.o que contiene código máquina pero que
no es un fichero ejecutable. Este debe de ser link-ado junto con la compilación
del fichero reverse.c que contiene el main(). Existe además un
fichero llamado Reverse.h que debe de contener aquellas definiciones
de funciones (prototipos de funciones) tipos y estructuras de datos que deben
de ser conocidos para el uso de las bibliotecas. En nuestro ejemplo, se
generan los siguientes ficheros:
- 1.
- El fichero Reverse.h:
width 3pt
width .3pt415pt/*
Reverse.h
Fichero cabecera con el prototipo de la función Reverse().
*/
void reverse( /* Invierte */
char *, /* la cadena de entrada */
char *); /* la cadena de salida */
width .3pt
depth .3pt
width -3pt
- 2.
- El fichero Reverse.c:
width 3pt
width .3pt415pt/*
Reverse.c
Fichero que contiene el código que de la función Reverse().
*/
#include <stdio.h> /* Puesto que utilizamos NULL */
#include <string.h> /* Para el uso de strlen() */
#include "Reverse.h" /* La definición de la biblioteca (a efectos de
chequeo de tipos en la compilación) */
void Reverse(char *in, char *out)
{
int i,j; /* Un par de iteradores */
int len=strlen(in); /* Longitud de la cadena a invertir */
/* Invertimos la cadena */
for(j=len-1,i=0;j>=0;j-,i++) out[i]=in[j];
/* NULL es el fin de cadena en C */
out[len]=NULL;
}
width .3pt
depth .3pt
width -3pt
- 3.
- Y el fichero en el que usamos la biblioteca construida:
width 3pt
width .3pt415pt/*
reverse.c
Testea el uso de la función Reverse.
*/
#include <stdio.h> /* Usamos el printf() */
#include "Reverse.h" /* Prototipo de Reverse(). Necesario ! */
main() /* Cuerpo principal del programa */
{
char str[100]; /* Buffer para realizar inversiones de cadenas */
Reverse("Hola",str); /* Invertimos la cadena 'Hola' */
/*
Presentamos en pantalla a través de la salida entandar el
resultado de la inversión de la cadena 'Hola'
*/
printf("Reverse (\"Hola\")=%s\n",str);
}
width .3pt
depth .3pt
width -3pt
Para compilar nuestro programa deberemos de ejecutar:
width 3pt
width .3pt415ptdali: % gcc -c Reverse.c
dali: % ls -l Reverse.o
-rw-r-r- 1 vi wheel 242 May 11 15:32 Reverse.o
dali: % gcc reverse.c Reverse.o -o reverse
width .3pt
depth .3pt
width -3pt
Y para ejecutar el ejemplo:
width 3pt
width .3pt415ptdali: % reverse
Reverse ("Hola")=aloH
dali: %
width .3pt
depth .3pt
width -3pt
El sistema de dependencia entre ficheros: make
Next: El sistema de dependencia
Up: Linux para Programadores
Previous: Programas con un solo
Vicente González Ruiz
1998-07-13