¿Cómo dividir un programa C en varios archivos?

3 minutos de lectura

avatar de usuario
amín

Quiero escribir mis funciones C en 2 archivos .c separados y usar mi IDE (Código::Bloques) para compilar todo junto.

¿Cómo configuro eso en Code::Blocks?

¿Cómo llamo funciones en uno? .c archivo desde dentro del otro archivo?

  • Las personas necesitarán saber qué IDE está utilizando para decirle cómo hacer algo en él.

    – J.Taylor

    26 de febrero de 2011 a las 17:54

  • No veo cómo esto podría ser más vago. ¿Ya probaste algo? ¿Conoces el lenguaje C? ¿Sabes lo que es un encabezado?

    – Mike Caron

    26 de febrero de 2011 a las 17:54

  • En caso de que no esté al tanto de esto: c generalmente se compila, mientras se habla de “llamar[ing] archivos para usarlos” tiene una sensación de lenguaje interpretado. El flujo de trabajo para los lenguajes compilados difiere ligeramente del de los lenguajes interpretados (aunque muchos IDE le ocultarán la diferencia).

    – dmckee — gatito ex-moderador

    26 de febrero de 2011 a las 17:57


avatar de usuario
Mateo Italia

En general, debe definir las funciones en los dos .c archivos (por ejemplo, A.c y B.c), y poner sus prototipos en los encabezados correspondientes (A.h, B.hrecuerda el incluir guardias).

siempre que en un .c archivo que necesita para utilizar las funciones definidas en otro .cVas a #include el encabezado correspondiente; entonces podrá usar las funciones normalmente.

Todos .c y .h los archivos deben agregarse a su proyecto; si el IDE te pregunta si hay que compilarlos, debes marcar solo los .c para la compilación

Ejemplo rápido:

Funciones.h

#ifndef FUNCTIONS_H_INCLUDED
#define FUNCTIONS_H_INCLUDED
/* ^^ these are the include guards */

/* Prototypes for the functions */
/* Sums two ints */
int Sum(int a, int b);

#endif

Funciones.c

/* In general it's good to include also the header of the current .c,
   to avoid repeating the prototypes */
#include "Functions.h"

int Sum(int a, int b)
{
    return a+b;
}

C Principal

#include <stdio.h>
/* To use the functions defined in Functions.c I need to #include Functions.h */
#include "Functions.h"

int main(void)
{
    int a, b;
    printf("Insert two numbers: ");
    if(scanf("%d %d", &a, &b)!=2)
    {
        fputs("Invalid input", stderr);
        return 1;
    }
    printf("%d + %d = %d", a, b, Sum(a, b));
    return 0;
}

  • si quiero usar un archivo .c, ¡debería crear su archivo de encabezado (.h) también!

    – amin

    26 de febrero de 2011 a las 18:26

  • solo quiero dividir mi programa completo en archivos .c y luego IDE compilarlos juntos

    – amin

    26 de febrero de 2011 a las 18:31

  • los #ifdef/#define/#endif están ahí para evitar problemas en caso de múltiples inclusiones del mismo encabezado. Echa un vistazo a la página sobre incluir guardias en Wikipedia – todo está explicado allí. Por cierto, dado que mi respuesta resolvió tu problema, puedes considerar marcarla como aceptada (¡gracias!). :)

    – Mateo Italia

    28 de febrero de 2011 a las 22:41


  • @lcmgcd en el orden que prefiera, cada uno es completamente independiente del otro y, de hecho, en las máquinas modernas se compilan varios archivos en paralelo. Es solo en la etapa de vinculación que se unen.

    – Mateo Italia

    21 de abril de 2018 a las 16:46

  • @learner, lamentablemente, eso depende del IDE/sistema de compilación exacto que esté utilizando, por lo que no creo que pueda agregarlo fácilmente. En última instancia, es una parte que es mejor dejar para las respuestas específicas de cada sistema de compilación.

    – Mateo Italia

    30 de noviembre de 2021 a las 21:28

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad