viernes, 30 de noviembre de 2012

Manual para para crear tu propia biblioteca en C/C++

El siguiente manual va a tratar sobre cómo crear tu propia biblioteca en un compilador de C/C++. La biblioteca, o también mal conocida como librería (del ingles library) nos permite el uso de funciones en un programa sin la necesidad de escribir su código en nuestro programa, únicamente llamando a la biblioteca donde está contenida. Existen bibliotecas estándares en C que ya vienen incluida en la mayoría de los compiladores, como son stdio.h, math.h, time.h... 
Para utilizar nuestra biblioteca, únicamente basta con situar en la cabecera del programa el nombre de la biblioteca para poder utilizar todas las funciones contenidas en la misma.

A continuación se detallan los paso para la construcción de una biblioteca o librería:



MANUAL CREACIÓN BIBLIOTECA:

   1º) Genera las funciones que te interesan y escribelas todas juntas (codigo y cabeceras) en un mismo archivo de texto (Puedes usar el editor de texto del compilador, el bloc de notas, igual da...) tal y como se ilustra a continuación con un sencillo ejemplo:


int multiplica(int A, int B);
int suma(int A, int B);
int resta(int A, int B);


int multiplica(int A, int B)
{
    return(A*B);
}
int suma(int A, int B)
{
    return(A+B);
}
int resta(int A, int B)
{
    return(A-B);
}
 

 
   2º) El fichero creado anteriormente, guardalo con extension .h, por ejemplo milibreria.h (importante no ejecutarlo para que no le pueda cambiar sola la extensión). Se deberá guardar en la carpeta include del compilador. Esta carpeta se puede encontrar facilmente en la misma carpeta del compilador., accediendo a Mi PC (Equipo) y en la carpeta donde se guardan todos los programas.
Otra opción es que si solo se desea usar mibiblioteca.h una unica vez, se puede guardar el fichero en la misma carpeta del codigo que queramos compilar. Dependiendo de este ultimo paso tendremos...

   3º)Llamar a la biblioteca en el programa. Deberemos colocar en la cabecera del programa, junto a los llamamiento de otras bibliotecas:

#include <milibreria.h>  Cuando el fichero milibreria.h se encuentre en la carpeta include de nuestro compilador.

#include "milibreria.h"   Cuando el fichero milibreria.h esté en el mismo directorio que el archivo que queremos compilar.

   4º)Uso de las funciones de la biblioteca: Finalmente ya podemos usar las funciones de milibreria.h sin necesidad de copiar el codigo, tal y como ilustra el programa siguiente:

#include <stdio.h>
#include <milibreria.h>

int main(void)
{
    int X,Y;
    scanf("%d %d",&X,&Y);
    printf("X*Y=%d \n",multiplica(X,Y));
    printf("X+Y=%d \n",suma(X,Y));
    printf("X-Y=%d \n",resta(X,Y));
}




Y en el caso de que milibreria.h esté en la misma carpeta:

#include <stdio.h>
#include "milibreria.h"

int main(void)
{
    int X,Y;
    scanf("%d %d",&X,&Y);
    printf("X*Y=%d \n",multiplica(X,Y));
    printf("X+Y=%d \n",suma(X,Y));
    printf("X-Y=%d \n",resta(X,Y));
}





Nota: En el caso de que tengan por un lado las declaraciones de las funciones en un fichero .h, y por otro lado, un fichero .c con los cuerpos de las funciones, debe proceder del modo siguiente:


-Fichero milibreria.h:

int multiplica(int A, int B);
int suma(int A, int B);
int resta(int A, int B);



-Fichero milibreria.c:

#include "milibreria.h"
int multiplica(int A, int B){
   return(A*B);
}
int suma(int A, int B){
   return(A+B);
}
int resta(int A, int B){
   return(A-B);
}


-Fichero del programa principal main.c:

#include <stdio.h>
#include "milibreria.h"
#include "milibreria.c"

int main(void)
{
    int X,Y;
    scanf("%d %d",&X,&Y);
    printf("X*Y=%d \n",multiplica(X,Y));
    printf("X+Y=%d \n",suma(X,Y));
    printf("X-Y=%d \n",resta(X,Y));
}

Cualquier duda pregunten. Espero que les haya servido este manual y creen ahora sus propias librerias.

31 comentarios:

  1. Hey muchas gracias por este aporte, me sirvió demasiado

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Gracias por el aporte.

    ¿Realmente, se podría decir que la creación de librearías es como crear funciones que van a ser llamadas en el programa pero en vez de utilizar "main" o "void", creamos directamente la función en un archivo ".h", no?

    Tengo una pregunta, ¿Cómo se podría crear un fichero ".h" que funcionara de diccionario de sinónimos?. Quiero decir, por ejemplo: "No = Nunca = Jamás", ó, "No lo se = Tal vez = Quien sabe".

    Es para que al responder una pregunta el ordenador sea capaz de determinar si una respuesta es "si, no, o quizás", pero sin que la expresión a utilizar tenga que ser necesariamente "No, si o quizás".

    ¿También se podría crear a través de un fichero ".txt" y utilizando funciones de la librería ?

    Gracias de nuevo. Fisgonearé mas en tu blog, parece interesante.

    P.D.: Este es un libro que hay en wikilibros, a lo mejor puede resultar un tanto básico y no se si aportará, pero para mi que estoy comenzando con esto de la programación me está viniendo genial, lo dejo aquí el enlace por si a alguien le puede resultar interesante:

    http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C

    Si hay algún problema o infrinjo alguna norma no dudes en hacer lo que creas necesario.

    ResponderEliminar
    Respuestas
    1. Corrijo: "¿También se podría crear a través de un fichero ".txt" y utilizando funciones de la librería string.h?"

      Eliminar
    2. Hola Diego, lo primero de todo es darte la bienvenida al blog.
      Como tu has dicho, al fin y al cabo el llamar a una biblioteca o una función viene a ser lo mismo, con la diferencia de que la biblioteca se encuentra en otro fichero y las funciones deben estar en el mismo. Yo por lo general me decanto por el uso de funciones, ya que no suele haber muchas de éstas que uses en diferentes programas, por lo que tampoco me merece pasar por el "complicado" tramite de crearte una. Sin embargo, si en tu caso piensas que vas a necesitar ciertas funciones en un numero importante de programas, yo te animo a que te ordenes las funciones de esa manera por temáticas.
      En cuanto a lo del diccionario de sinónimos, lo más sencillo es guardarlo en un .txt. Por ejemplo, en cada línea, guardar la palabra primero, y luego sus sinónimos tal que:

      Sí/ Vale/ Me parece bien
      No/Nunca/Jamás
      Quizás/Tal vez/No lo sé
      ...

      Y para trabajr con ficheros de texto es suficiente con la biblioteca IO sino recuerdo mal.

      Un saludo, espero que te haya sido útil y gracias por tu aporte.

      Eliminar
  7. Muchas gracias por el aporte un saludo

    ResponderEliminar
    Respuestas
    1. Muchas gracias Angel, encantado de que sea útil
      Un saludo

      Eliminar
  8. me gustaria que explicaran las funciones desde lo basico porfavor

    ResponderEliminar
  9. ¿El cómo funcionan las funciones en C?

    ResponderEliminar
  10. Genial articulo me ha sido super útil !!!

    ResponderEliminar
  11. Es bastante útil, aunque en mi caso, me han proporcionado una librería pero en ella, están el archivo.h y archivo.c . En el archivo.h sólo vienen especificadas las funciones y en archivo.c ya vienen programadas las funciones declaradas en archivo.h.

    Cuando corro un programa, me dice que referencia a 'funcion' sin definir. supongo que porque no está enlazado el archivo.h con el archivo.c pero... no se como hacerlo. Tienes alguna idea?

    ResponderEliminar
    Respuestas
    1. Supongo que en tu caso tendrás por un lado un fichero .h con las declaraciones (milibreria.h):

      int multiplica(int A, int B);
      int suma(int A, int B);
      int resta(int A, int B);

      Y otro .c (milibreria.c) con los cuerpos de las funciones, donde se llama también al fichero .h:

      #include "milibreria.h"
      int multiplica(int A, int B)
      {
      return(A*B);
      }
      int suma(int A, int B)
      {
      return(A+B);
      }
      int resta(int A, int B)
      {
      return(A-B);
      }

      Es importante que ambos ficheros tengan el mismo nombre a excepción de la extensión. Para utilizar las funciones de la biblioteca bastará con que añadas el comando #include en el código de tu programa, tanto para el .c como para el .h:

      #include
      #include "milibreria.h"
      #include "milibreria.c"

      int main(void)
      {
      int X,Y;
      scanf("%d %d",&X,&Y);
      printf("X*Y=%d \n",multiplica(X,Y));
      printf("X+Y=%d \n",suma(X,Y));
      printf("X-Y=%d \n",resta(X,Y));
      }

      Espero que funcione, sino hazmelo saber.

      Un saludo

      Eliminar
  12. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  13. Muy buen material me sirvió para aclarar ciertas dudas excelente :D

    ResponderEliminar
  14. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  15. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  16. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  17. Hola,me podrias explicar como creo en visual studio un proyecto para poder crear una librería en c++,lo que pasa es que yo tengo el visual studio Enterprises y tengo un nivel de programacíon bastante basico,entonces ami solamente me han enseñado ha crear un proyecto de una sola forma con el enterprises y es 1.archivo,2.nuevo,3.proyecto,4.instalado,5.plantillas,6.visualC++,7.CLR,8.proyecto vacío de CLR o CLR Empity proyect.todo esto en visual studio enterprises,porque tengo entendido que en profesional es diferente ,bueno ,lo que pasa es que cuando yo ago esto y luego copio esto:

    int multiplica(int A, int B);
    int suma(int A, int B);
    int resta(int A, int B);

    int multiplica(int A, int B)
    {
    return(A*B);
    }
    int suma(int A, int B)
    {
    return(A+B);
    }
    int resta(int A, int B)
    {
    return(A-B);
    }
    y lo pego en el desarrollo de mi proyecto con la intencion de seguir los pasos del manual y crear una biblioteca,me sale una rayita en no mas de una casilla de este tamaño aprox: _ ,y me sale eso en el primer reglon en la primera casilla(por decirlo asi no)y cuando yo pongo el mause sobre esa rayita que indica algun error ,me sale "Advertencia de PCH:el elemento stop del encabezado debe estar en el ámbito global.No se genero un archivo PCH intellisense"(bueno yo nose como se dira esto en ingles ,derrepente esta mal traducido), entonces yo nose si esta bien;o si deveria de usar visual studio profesional o cual seria la forma de poder crear un proyecto para crear una biblioteca con enterprises.
    gracias ,ayuda lo mas pronto posible porfis es para un trabajo

    ResponderEliminar
  18. actualiza la creación de librerías para versiones recientes

    ResponderEliminar
  19. Si mis funciones tienen en sus parámetros estructuras incluidas, ¿Donde pongo esas estructuras?

    ResponderEliminar
  20. y por ejemplo quiero usar una biblioteca donde se usen estructuras?

    ResponderEliminar
  21. Tengo una duda. ¿Para que sirve dividir la biblioteca en 2 archivos? Uno .h y el otro .c

    ResponderEliminar
  22. Muchas gracias.He pasado todo el dia buscando como se hacen las bibliotecas y gracias a ti ya lo comprendí

    ResponderEliminar
  23. Hola, buenas noches.
    Tengo un problema con una clase que cree, intento comparar dos números, sin embargo al momento de ejecutarlo solo toma el valor de x.


    //Librería llamada función
    int comparacion (x,y);

    int comparacion (x,y){
    if (x>y){
    return x;
    }else if (y>x){
    return y;
    }
    } // fin de la librería


    //Inicio de mi programa

    #include
    #include "comparacion.h"
    #include

    int main (void){
    setlocale(LC_CTYPE,"Spanish");
    int x[]={'4'};
    int y[]={'4'};
    //Para verificar que el número correponde a dicho arreglo
    printf("\nEl valor del arreglo 'x' es: %s\n",x); //Para verificar que el número correponde a dicho arreglo
    printf("\nEl valor del arreglo 'y' es: %s\n",y);
    if (x[0]==y[0]){
    printf("\nLos valores ingresados en los arreglos son iguales.\n");
    }else{
    printf ("\nEl número mayor es: %s\n",comparacion(x,y));
    }
    printf("\nFin del programa\n\a");
    }

    ResponderEliminar