[C con Clase] Duda trabajo con varios ficheros.

Programante programante en gmail.com
Mar Sep 22 22:37:51 CEST 2009


Jorge Vega Sanchez escribió:
> Buenas
>
> Tengo una duda que me no termino de entender.
> Estoy realizando un proyecto de investigación y estoy probando unos
> códigos de ejemplos básicos de una nueva metodología.
> He comenzado con el típico programa Hello World, que ya en esto
> implica cierta complejidad y varias lineas de código (aprox unas 50 o 60.
> Este código esta realizado en C y yo lo quiero unir a parte de mi
> código C++ para ver que funciona y probar unas librerías mías.
>
> Problema: en la unión dado que ambos códigos son bastante diferentes
> se me ha ocurrido dejar el código nuevo en otro fichero para
> llamarlo/invocarlo desde mi programa principal.
> El problema es que no sé como ponerlo en otro fichero y llamarlo desde
> otro fichero. Este código necesita librerias propias y creo que no
> puedo meterlo en el fichero de cabecera. Puedo dejarlo en otro fichero
> .cpp y aun así llamarlo o invocarlo desde otro fichero. Como se haría.
>
> En cuanto a la compilación, debo seguir algún orden en especial. La
> realizo desde línea de comando mediante un makefile y tengo dudas
> sobre como introducir el orden de compilación.
>
> Gracias de antemano.
>
> Best regards
> Jorge 

Si estás llamando desde C++ a código en C, asegúrate que los prototipos
están dentro de una sección extern "C" { ... }
Igualmente, las funciones en C++ que quieras llamar desde C tendrán que
ir precedidas de extern "C"
De ese modo, C++ no hará el name-mangling y el código objeto usará la
misma convención de los nombres.

La compilación no requiere ningún orden especial. Podrías usar los
siguientes comandos:
gcc -c archivo1.c -o archivo1.o
g++ -c archivo2.cpp -o archivo2.o
g++ archivo1.o archivo2.o -o ejecutable

(con distinto compilador, la sintaxis variará)

En un Makefile esto se vería así:

ejecutable: archivo1.o archivo2.o
    g++ archivo1.o archivo2.o -o ejecutable
archivo1.o: archivo1.c
    gcc -c archivo1.c -o archivo1.o
archivo2.o: archivo2.cpp
g++ -c archivo2.cpp -o archivo2.o





Más información sobre la lista de distribución Cconclase