Saltar al contenido

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

No olvides que en las ciencias informáticas cualquier problema casi siempere puede tener diversas resoluciones, de igual modo te enseñaremos lo mejor y más eficiente.

Solución:

contenido del encabezado

el encabezado A.h por A.c solo debe contener la información que es necesaria para el código externo que utiliza las instalaciones definidas en A.c. no debe declarar static funciones; no debe declarar static variables; no debe declarar tipos internos (tipos usados ​​solo en A.c). Debe garantizar que un archivo pueda usar solo #include "A.h" y luego hacer pleno uso de las instalaciones publicadas por A.c. Debe ser autónomo, idempotente (para que pueda incluirlo dos veces sin errores de compilación) y mínimo. Simplemente puede verificar que el encabezado sea autónomo escribiendo #include "A.h" como el primero #include en linea A.c; puede verificar que es idempotente incluyéndolo dos veces (pero es mejor hacerlo como una prueba separada). Si no compila, no es autónomo. Del mismo modo para B.h y B.c.

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 codificación de la NASA, y ‘Enlace contra un static biblioteca’, que incluye un script chkhdr que utilizo para probar la autocontención y la idempotencia.

Enlace

Tenga en cuenta que main.o depende de main.c, A.h y B.hpero main.c en sí no depende de los encabezados.

Cuando se trata de compilación, puede usar:

gcc -o program main.c A.c B.c

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 compilar cada archivo en código objeto por separado y luego vincular los archivos objeto:

gcc -c main.c
gcc -c A.c
gcc -c B.c
gcc -o program main.o A.o B.o

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

En términos generales, puede tener un archivo de encabezado para cada archivo fuente en el que exporta todas las funciones declaradas o extern simbolos

En la práctica, no siempre necesitará exportar todas las funciones o todas las variables, solo las que requiere otro archivo fuente, y deberá incluirlas solo en el archivo requerido (y en la fuente emparejada con el archivo de encabezado específico ).

Cuando intente entender cómo funciona, solo piense en el hecho de que cada archivo fuente se compila por sí solo, por lo que si va a usar algo que no está declarado directamente en su archivo fuente, entonces debe declararse a través de un archivo de encabezado. De esta forma el compilador puede saber que todo existe y está tipeado correctamente.

Dependería del compilador, pero asumiendo que estás usando gcc, podrías usar algo como esto:

gcc -Wall main.c A.c B.c -o myoutput

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

gcc -c main.c
gcc -c A.c
gcc -c B.c
gcc -o mybin main.o A.o B.o

Si estás contento con lo expuesto, tienes la opción de dejar un post acerca de qué te ha impresionado de este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *