Proyectos con varios archivos
Headers y unidades de traducción
Proyectos con varios archivos es una lección gratuita de C Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.
Por qué dividir los archivos
Los programas reales no viven en un único archivo .c. Dividir el código en varios archivos:
- Agrupa las funciones relacionadas
- Permite al compilador recompilar solo lo que ha cambiado
- Hace que el código se pueda reutilizar en distintos proyectos
- Permite que un equipo trabaje sin conflictos constantes
Entender cómo se enlazan las piezas es esencial.
Unidades de traducción
Cada archivo .c, después de que el preprocesador expande sus #include, se convierte en una unidad de traducción.
El compilador convierte cada unidad de traducción en un archivo objeto (.o) de forma independiente. En esta etapa no conoce los demás archivos.
Declaración frente a definición
Una declaración informa al compilador de que existe una función y cuál es su firma. Una definición proporciona el cuerpo real.
Los demás archivos solo necesitan la declaración para llamar a una función. La definición debe existir en un único lugar.
int add(int a, int b); /* declaration: a promise */
int add(int a, int b) { /* definition: the body */
return a + b;
}El archivo de cabecera
Las declaraciones se colocan en una cabecera (.h). Cualquier archivo que quiera utilizar la función incluye la cabecera.
La cabecera es la interfaz pública; el archivo .c correspondiente es la implementación privada.
/* math_utils.h */
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
int mul(int a, int b);
#endifEl archivo de implementación
El archivo .c incluye su propia cabecera y define las funciones.
Incluir la propia cabecera permite al compilador verificar que las definiciones coinciden con las declaraciones.
/* math_utils.c */
#include "math_utils.h"
int add(int a, int b) { return a + b; }
int mul(int a, int b) { return a * b; }Usar el módulo
Otro archivo incluye la cabecera y llama a las funciones. Nunca necesita ver sus cuerpos.
El compilador confía en las declaraciones; más adelante, el enlazador conectará las llamadas con las definiciones reales.
/* main.c */
#include <stdio.h>
#include "math_utils.h"
int main(void) {
printf("%d\n", add(2, 3));
return 0;
}Compilar y enlazar
Hay dos fases. Primero, compile cada archivo en un archivo objeto con -c. Después, enlace los objetos para crear un único ejecutable.
El enlazador resuelve cada llamada a add buscando su definición en math_utils.o.
gcc -c main.c # -> main.o
gcc -c math_utils.c # -> math_utils.o
gcc main.o math_utils.o -o appComillas frente a corchetes angulares
La sintaxis de inclusión controla la ruta de búsqueda:
#include "math_utils.h"busca primero en el directorio del proyecto#include <stdio.h>busca únicamente en las rutas de inclusión del sistema
Use comillas para sus propias cabeceras y corchetes angulares para la biblioteca estándar.
La palabra clave extern
Para compartir una variable global entre varios archivos, defínala una vez en un archivo .c y declárela con extern en la cabecera.
extern indica que «esta variable existe en otro lugar», evitando definiciones duplicadas.
/* in config.h */
extern int g_verbose; /* declaration */
/* in config.c */
int g_verbose = 0; /* the single definition */La palabra clave static
En el ámbito de archivo, static hace que una función o variable sea privada para su unidad de traducción.
Una función auxiliar estática no se puede enlazar desde otros archivos, lo que evita conflictos de nombres y oculta los detalles de implementación. Es la forma de C de marcar algo como interno.
/* visible only inside this .c file */
static int helper(int x) {
return x * 2;
}La regla de una sola definición
Una función no estática o un símbolo global puede estar definido exactamente una vez en todo el programa. Puede declararlo en muchos archivos, pero debe definirlo en uno solo.
Dos definiciones de add producen un error del enlazador como multiple definition of 'add'. Por eso los cuerpos de las funciones no se incluyen en los archivos de cabecera.
Comprobación rápida
Determine qué elementos deben pertenecer a un archivo de cabecera.
Resumen
Ya puede estructurar un proyecto con varios archivos:
- Cada archivo
.ces una unidad de traducción que se compila de forma independiente en un archivo.o - Las cabeceras contienen declaraciones; cada definición se encuentra en un archivo
.c - El enlazador resuelve las llamadas entre archivos objeto
externcomparte variables globales;staticmantiene privados los símbolos locales al archivo
A continuación: automatizar la compilación con Makefiles.
Preguntas frecuentes
¿La lección «Proyectos con varios archivos» es gratis?
Sí — el texto completo de «Proyectos con varios archivos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Proyectos con varios archivos»?
Headers y unidades de traducción Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C Academy?
No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Proyectos con varios archivos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C Academy?
Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Compilación condicional
- Proyectos con varios archivos
- Makefiles
- Bibliotecas estáticas y compartidas