Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/11/2017, 03:25
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Incluir ficheros de cabecera en C

Esos errores no te los da el compilador, sino el linker (enlazador, es el que se encarga de 'conectar' las llamadas a función con las funciones en sí).

Cuando #incluyes "ordenacion.c", estás ya incluyendo el código de las funciones que has implementado en ese archivo, y el programa te funciona. Dado que lo haces al principio, no hay problemas, puesto que las funciones están implementadas antes de su empleo.

En cambio, cuando #incluyes "ordenacion.h", solamente incluyes los prototipos, pero NO LAS FUNCIONES EN SÍ. Por eso, el compilador no da errores (el código es correcto, al menos sintácticamente), pero el linker te da ese error, para decirte que no dispone de esas funciones.

La manera de hacerlo es:

- Tienes un archivo 'ordenacion.h', con los prototipos de funciones y estructuras de datos que tienes en 'ordenacion.c', que es donde implementas esas funciones.

- Tienes un archivo, llamémoslo 'mi_programa.c', que necesita de esas funciones que tienes en 'ordenacion.c'.

La manera de compilar el programa es:

Archivo 'ordenacion.c': Tienes que #incluir 'ordenacion.h'.
Archivo 'mi_programa.c': Tienes que #incluir 'ordenacion.h'.

Proyecto en Dev-C++: Tendrás que crear un proyecto y añadirle los archivos 'ordenacion.h', 'ordenacion.c' y 'mi_programa.c'. Al crear el ejecutable (con Make), ya se encarga de todo. (yo no he utilizado Dev-C++, pero todos los entornos de desarrollo funcionan de manera similar).

Compilar por línea de comando: Depende de cada compilador, probablemente será algo similar a
"compila mi_programa.c ordenacion.c mi_programa.exe"

Importante: Aunque no sea ilegal, NO DEBES incluir código fuente en un programa en la forma en que lo has hecho en el código que has posteado. No es ilegal, pero puede dar muchos problemas a la hora de utilizar algún depurador o, simplemente, volverse loco con los números de línea al reportar errores de compilación.

Saludos,