Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: frostshadow6 en 19 Mayo 2017, 11:08 am



Título: (duda) Crear un archivo con funciones para poder usarlas.
Publicado por: frostshadow6 en 19 Mayo 2017, 11:08 am
Buenas!

Estoy en primer año de ingenieria informática (programando en c++) y hemos empezado a trabajar con clases.

Mi pregunta es, seria posible hacer un fichero donde se puedan implementar funciones, sin la necesidad de crear una clase en si, solo implementar funciones para que luego solo con hacer include de ese fichero pueda usar las funciones.

Es decir, si yo quiero hacer un fichero donde guardar una funcion donde le pase 3 numeros y me devuelva la suma de los 3 (super simple) para despues en cualquier programa principal solo con hacer include de ese fichero, ya pueda utilizar esa función, y todas las que estén implementadas en él. 

Seria eso posible? Si es así, como se haria?

Gracias de antemano =)


Título: Re: (duda) Crear un archivo con funciones para poder usarlas.
Publicado por: MAFUS en 19 Mayo 2017, 14:09 pm
Sí, de hecho esto es la base de la programación modular. Es lo mismo que te han enseñado para las clases pero sin encerrar las funciones dentro de una clase.
Por una parte creas el archivo de cabecera con las declaraciones de las funciones y por otra un archivo de implementación que llevará las definiciones. En éste último harás include del primero.
Compilas el archivo para crear un archivo objeto, librería estática o librería dinámica.
En el programa cliente incluyes la cabecera y a la hora de enlazar para generar el ejecutable o librería debes indicar al enlazador que debe usar el archivo objeto, librería estática o librería dinámica que has compilado con anterioridad.

Ejemplo:
Cabecera: suma.h
Código
  1. #ifndef SUMA_H
  2. #define SUMA_H
  3.  
  4. int suma(int a, int b, int c);
  5.  
  6. #endif

Implementación: suma.c
Código
  1. #include "suma.h"
  2.  
  3. int suma(int a, int b, int c) {
  4.    return a + b + c;
  5. }

Ahora en gcc se genera el archivo objeto suma.o:
Código
  1. gcc -c suma.c

Programa cliente: programa.c
Código
  1. #include <stdio.h>
  2. #include "suma.h"
  3.  
  4. int main() {
  5.    printf("%d\n", suma(1, 2, 3));
  6. }

Ahora en gcc se compila el programa entero.
Código
  1. gcc programa.c suma.o -o programa

En el archivo de cabecera se pueden ver las guardas con hechas con directivas de preprocesador. Esto es para que no se incluya más de una vez la misma cabecera, cosa que crearía conflictos.