Cómo vincular múltiples archivos de implementación en C

Tengo varios archivos .c , es decir, los archivos de implementación dicen

  • C Principal
  • C.A
  • Antes de Cristo

Donde las funciones de cualquiera de los archivos pueden llamar a cualquier función desde un archivo diferente. Mi pregunta es, ¿necesito un archivo de cabecera .h ie para cada implementación de A y B, donde cada archivo de cabecera tiene la definición de TODAS las funciones en A o B.

Además, main.c tendrá tanto Ah como Bh #included en él?

Si alguien finalmente puede dejar en claro, también, ¿cómo más tarde comstackr y ejecutar los múltiples archivos en la terminal.

Gracias.

Contenido del encabezado

El encabezado Ah para Ac solo debe contener la información necesaria para el código externo que utiliza las funciones definidas en Ac . No debería declarar funciones estáticas; no debería declarar variables estáticas; no debería declarar tipos internos (tipos utilizados solo en Ac ). Debe garantizar que un archivo puede usar simplemente #include "Ah" y luego hacer un uso completo de las instalaciones publicadas por Ac . Debe ser autónomo e idempotente (para que pueda incluirlo dos veces sin ningún error de comstackción). Simplemente puede verificar que el encabezado sea autocontenido escribiendo #include "Ah" como la primera línea #include en Ac ; puede verificar que sea idempotente incluyéndolo dos veces (pero es mejor hacerlo como una prueba separada). Si no comstack, no es autocontenido. Del mismo modo para Bh y Bc .

Para obtener más información sobre encabezados y estándares, consulte ‘ ¿Debo usar #include en los encabezados? ‘, que hace referencia a un estándar de encoding de la NASA, y’ Vinculación con una biblioteca estática ‘, que incluye un script chkhdr que uso para probar la autocontención y la idempotencia.

Enlace

Tenga en cuenta que main.o depende de main.c , Ah y Bh , pero main.c no depende de los encabezados.

Cuando se trata de comstackción, puede usar:

 gcc -o program main.c Ac Bc 

Si necesita otras opciones, agréguelas (la mayoría de las banderas al principio, las bibliotecas al final, después del código fuente). También puede comstackr cada archivo a código objeto por separado y luego vincular los archivos objeto juntos:

 gcc -c main.c gcc -c Ac gcc -c Bc gcc -o program main.o Ao Bo 

Debe proporcionar un archivo de encabezado solo si lo que se declara en un archivo .c es obligatorio en otro archivo .c .

En términos generales, puede tener un archivo de encabezado para cada archivo fuente en el que exporte todas las funciones declaradas o símbolos extern .

En la práctica, no siempre tendrá que exportar cada función o cada variable, solo la requerida por otro archivo fuente, y deberá incluirla solo en el archivo requerido (y en la fuente emparejada con el archivo de encabezado específico). )

Cuando intente comprender cómo funciona, piense en el hecho de que cada archivo fuente se comstack por sí mismo, de modo que si va a usar algo que no está declarado directamente en su archivo fuente, debe declararse a través de un archivo de encabezado. De esta forma, el comstackdor puede saber que todo existe y que está escrito correctamente.

Dependería del comstackdor, pero suponiendo que estés usando gcc, podrías usar algo como esto:

 gcc -Wall main.c Ac Bc -o myoutput 

Consulte http://www.network-theory.co.uk/docs/gccintro/gccintro_11.html (primera respuesta de Google) para obtener más detalles. Puede comstackrlo en múltiples archivos / bibliotecas de objetos:

 gcc -c main.c gcc -c Ac gcc -c Bc gcc -o mybin main.o Ao Bo