Menu
Coddy logo textTech

Archivos fuente

Parte de la sección Object Oriented Programming del Journey de C de Coddy — lección 3 de 61.

Hasta ahora, hemos colocado las declaraciones de funciones en archivos de cabecera, pero el código real de la función (la definición) ha residido en el archivo principal. El siguiente paso en la programación modular es mover esas definiciones a sus propios archivos de fuente (archivos .c).

Esto crea una estructura limpia de tres partes: el encabezado declara las funciones, un archivo fuente separado las define y main simplemente las utiliza. Así es como se ve:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

Observa que math_utils.c incluye su propio encabezado. Esto asegura que la definición de la función coincida con la declaración; si no coinciden, el compilador detectará el error. El archivo principal solo necesita incluir el encabezado para usar la función; no necesita saber cómo funciona add internamente.

Esta separación mantiene ocultos los detalles de implementación y permite modificar la lógica de la función sin tocar los archivos que utilizan esas funciones.

challenge icon

Desafío

Fácil

Vamos a construir una utilidad matemática simple organizando tu código en la estructura adecuada de tres archivos: un encabezado para las declaraciones, un archivo de origen para las implementaciones y un archivo principal que los utiliza.

Crearás tres archivos:

  • math_ops.h: Tu archivo de encabezado que contiene las declaraciones de función para dos operaciones: multiply y subtract. Ambas funciones toman dos enteros y devuelven un entero. No olvides incluir guardas utilizando el símbolo MATH_OPS_H.
  • math_ops.c: Tu archivo de origen que contiene las implementaciones reales de multiply y subtract. Este archivo debe incluir su propio encabezado para asegurar que las declaraciones coincidan con las definiciones.
  • main.c: Tu archivo principal que incluye el encabezado y utiliza ambas funciones para realizar cálculos.

La función multiply debe devolver el producto de dos enteros, y subtract debe devolver el primer entero menos el segundo.

Recibirás dos entradas enteras: a y b.

En tu función principal, imprime los resultados de ambas operaciones en líneas separadas:

Product: {result of multiply}
Difference: {result of subtract}

Por ejemplo, con las entradas 8 y 3, la salida sería:

Product: 24
Difference: 5

Hoja de referencia

Las definiciones de funciones pueden moverse del archivo principal a archivos de fuente (archivos .c) separados, creando una estructura modular de tres partes:

  • Archivo de cabecera (.h): Contiene las declaraciones de funciones
  • Archivo de fuente (.c): Contiene las definiciones de funciones
  • Archivo principal (main.c): Utiliza las funciones

Estructura de ejemplo:

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif
// math_utils.c
#include "math_utils.h"

int add(int a, int b) {
    return a + b;
}
// main.c
#include <stdio.h>
#include "math_utils.h"

int main() {
    printf("%d\n", add(5, 3));
    return 0;
}

El archivo de fuente (.c) debe incluir su propia cabecera para asegurar que la definición de la función coincida con la declaración. El archivo principal solo necesita incluir la cabecera para usar las funciones, manteniendo ocultos los detalles de implementación.

Pruébalo tú mismo

#include <stdio.h>
#include "math_ops.h"

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: Llamar a la función de multiplicación con a y b, almacenar el resultado
    
    // TODO: Llamar a la función de resta con a y b, almacenar el resultado
    
    // TODO: Imprimir los resultados en el formato:
    // Product: {resultado de la multiplicación}
    // Difference: {resultado de la resta}
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Object Oriented Programming