Archivos de cabecera y de código fuente
Separe las declaraciones del código
Archivos de cabecera y de código fuente es una lección gratuita de C Academy en CoddyKit. Esta es la lección 1 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é separar el código en archivos?
A medida que los programas en C crecen, mantenerlo todo en un único archivo .c dificulta la lectura y ralentiza la compilación.
C permite dividir un proyecto en varios archivos: cada uno se ocupa de una responsabilidad. Esto mejora la organización, permite reutilizar código y evita tener que recompilarlo todo al cambiar una parte.
Dos tipos de archivos
Un proyecto modular en C utiliza dos tipos de archivos.
Los archivos de código fuente (.c) contienen la implementación real: los cuerpos y las definiciones de las funciones.
Los archivos de cabecera (.h) contienen declaraciones: prototipos de funciones, definiciones de tipos y macros que otros archivos necesitan conocer.
Un archivo de cabecera
Una cabecera declara qué existe sin indicar cómo funciona.
Aquí math_utils.h declara una función add. Cualquier archivo que incluya esta cabecera conocerá la signatura de la función y podrá llamarla.
/* math_utils.h */
int add(int a, int b);El archivo de código fuente correspondiente
El archivo de código fuente proporciona la implementación. Incluye su propia cabecera para que el compilador pueda comprobar que la definición coincide con la declaración.
Observe que la cabecera se incluye entre comillas, como se hace con los archivos del propio proyecto.
/* math_utils.c */
#include "math_utils.h"
int add(int a, int b) {
return a + b;
}Uso del módulo
Ahora main.c incluye la cabecera y llama a add. Nunca ve el cuerpo de la función, solo el prototipo.
El compilador confía en la declaración; posteriormente, el enlazador conecta la llamada con la implementación real de math_utils.c.
/* main.c */
#include <stdio.h>
#include "math_utils.h"
int main(void) {
printf("%d\n", add(2, 3));
return 0;
}Comillas frente a corchetes angulares
La directiva #include tiene dos formas.
#include <stdio.h> usa corchetes angulares para las cabeceras del sistema y de la biblioteca estándar. El compilador busca en sus rutas de inclusión estándar.
#include "math_utils.h" usa comillas para sus propias cabeceras, que se buscan primero en el directorio actual.
#include <stdio.h> /* standard library */
#include "math_utils.h" /* your project */Qué debe contener una cabecera
Coloque las declaraciones en las cabeceras, no las definiciones.
Contenido adecuado para una cabecera: prototipos de funciones, declaraciones de struct y typedef, macros #define y declaraciones de variables extern.
Evite colocar allí cuerpos de funciones o definiciones de variables, ya que pueden provocar errores de símbolos duplicados.
/* shapes.h */
typedef struct {
double width;
double height;
} Rect;
double rect_area(Rect r);Qué debe contener un archivo de código fuente
El archivo de código fuente contiene el trabajo real: las definiciones de las funciones y las funciones auxiliares privadas del archivo.
Incluye la cabecera correspondiente para que el compilador verifique que las signaturas coinciden. Esto detecta pronto las discrepancias, en lugar de hacerlo durante el enlazado.
/* shapes.c */
#include "shapes.h"
double rect_area(Rect r) {
return r.width * r.height;
}Declaración frente a definición
Esta distinción es fundamental en el C modular.
Una declaración indica al compilador el tipo y la signatura de un nombre para que pueda utilizarse: int add(int, int);
Una definición crea la entidad real, asignando almacenamiento o proporcionando el cuerpo. Las cabeceras declaran; los archivos de código fuente definen.
int add(int a, int b); /* declaration */
int add(int a, int b) { /* definition */
return a + b;
}Convenciones de nomenclatura
Un patrón habitual empareja cada módulo por nombre: logger.h con logger.c, parser.h con parser.c.
Esto deja claro dónde se encuentra una implementación. Agrupe las funciones relacionadas en un módulo para que cada archivo tenga una única responsabilidad clara.
/* logger.h */
void log_info(const char *msg);
void log_error(const char *msg);El proceso de compilación
Cada archivo .c se compila de forma independiente en un archivo objeto; después, todos los objetos se enlazan en un único programa.
Las cabeceras no se compilan por separado: se insertan textualmente en los archivos de código fuente que las incluyen. Exploraremos todo el proceso de compilación en una lección posterior.
gcc -c main.c /* -> main.o */
gcc -c math_utils.c /* -> math_utils.o */
gcc main.o math_utils.o -o appComprobación rápida
Ponga a prueba su comprensión de las funciones de las cabeceras y los archivos de código fuente.
Resumen
Ha aprendido a dividir un proyecto de C en cabeceras .h y archivos de código fuente .c.
Las cabeceras declaran qué existe; los archivos de código fuente definen cómo funciona. Use comillas para sus propias cabeceras y corchetes angulares para las estándar.
A continuación evitaremos los problemas causados por incluir una cabecera más de una vez.
Preguntas frecuentes
¿La lección «Archivos de cabecera y de código fuente» es gratis?
Sí — el texto completo de «Archivos de cabecera y de código fuente» 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 «Archivos de cabecera y de código fuente»?
Separe las declaraciones del código 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 1 de 4.
¿Cuánto tiempo toma la lección «Archivos de cabecera y de código fuente»?
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
- Archivos de cabecera y de código fuente
- Guardas de inclusión
- extern y linkage
- Compilar varios archivos