C/Visual C - Compilación en módulos

 
Vista:

Compilación en módulos

Publicado por BluSky (11 intervenciones) el 27/08/2003 19:34:47
Una duda me surge: En un programa C sé que puedo llevar las funciones a un fichero .h y añadir los correspondientes "include" en el main. Me han comentado que también se pueden llevar a un ".c" pero, en este caso, supongo que habrá que compilar todos los módulos y linkar ¿es así?.
Suponiendo el m´dulo de main y otros dos .c que contienen funciones utilizadas en main ¿alguien me puede contar cómo lo echo a andar? ¿habría mucha diferencia en Linux?
Saludos
Sebas
NOTA: Como leerás esto Chuidiang:-)) agradecerte la ayuda de mi nota anterio. Está perfectamente claro el tema de las referencias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Compilación en módulos

Publicado por jp (27 intervenciones) el 28/08/2003 00:26:54
no hace falta compilar todos los .c de hecho no hay que compilarlos....

solo que podría haber un conflicto si definiste las mismas librerías en los .c o .h

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Compilación en módulos

Publicado por chuidiang (677 intervenciones) el 28/08/2003 09:32:46
La forma mas normal de hacerlo consiste en hacer para cada grupo de funciones del mismo tema (por ejemplo, de matematicas, o de colas, o de graficos, o lo que sea) un .h con los prototipos de las funciones y un .c con el codigo de dichas funciones. Echa por ejemplo un ojo a math.h o stdio.h. En la primera solo hay prototipos de funciones matematicas, en la segunda solo prototipos de funciones de entrada/salida.

El fichero .c con las funciones se suele compilar en una libreria (.dll o .lib para windows, .a o .so para linux). Para utilizar esa libreria debes mantener el .h y el .lib (.dll, .a o .so) generado

Cuando un programa utilice estas funciones, debe hacer include del .h y a la hora de linkar, añadir el .lib (.dll, ...) ya compilado.

Todo esto es util si las funciones vas a usarlas en otros proyectos. Por ejemplo, si haces una libreria de funciones para mover imagenes por pantalla, es posible que la uses en varios proyectos de juegos que quieras hacer.

Si no quieres hacer la libreria (por ejemplo, porque son funciones muy especificas para un proyecto concreto que no vas a reutilizar mas), basta con poner todos los .c implicados en una unica orden de compilacion (supongo que que en visual c++ es meterlos todos dentro del mismo proyecto, en linux, desde linea de comandos seria algo asi como "gcc main.c funciones.c -o main"). Esto no es eficiente en proyectos grandes, porque cada vez que toques un .c, tienes que recompilarlos todos (aunque supongo que visual c++ es listo y no lo hace así aunque metas todos los .c en el mismo proyecto).

Hacer includes del fichero que contiene el codigo (el .h con codigo o include del .c) funcion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Compilación en módulos

Publicado por BluSky (11 intervenciones) el 28/08/2003 14:50:50
Vale chuidiang. ENtendido. Eso es más o menos lo que he probado esta mañana, solo que compilando con cc en vez de gcc. El comando, idéntico al que tú me das pero me da errores de compilación que en windows no me daba (uno de ellos referido a un delete de un puntero que no recuerdo ahora mismo exactamente).
¿Puede ser debido al uso de cc en lugar de gcc?. En el ".h" he incluido unas clausulas
#if !define _Funcion_h_
#define _Funcion_h_
.....//declaración de las structuras que uso y prototipo de funciones
.... //la implementación de las funciones las tengo en un ".c"
#endif
¿es así?
Gracias
Sebas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Compilación en módulos

Publicado por chuidiang (677 intervenciones) el 28/08/2003 16:37:48
cc creo que es el compilador de c, por lo que no tiene delete. Si usas delete, debes usar un compilador de c++. Si no debes cambiar new y delete por malloc() y free().

En cuanto a las clausulas estupendo. Yo uso #ifndef, asi que no se si #if !define es correcto, pero supongo que si.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Compilación en módulos

Publicado por BluSky (11 intervenciones) el 28/08/2003 23:30:52
Qué razón tienes.... A veces hago agua por donde menos debería. Como ando haciendo cosas de C y C++ ya pones en uno lo que debería ser en el otro y viceversa
Menos mal que os tenemos por aquí
Gracias de nuevo
Saludos
Sebas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar