Menu
Coddy logo textTech

Arquivos-Fonte

Parte da seção Object Oriented Programming do Journey de C da Coddy — lição 3 de 61.

Até agora, colocamos as declarações de função em arquivos de cabeçalho, mas o código real da função (a definição) residia no arquivo principal. O próximo passo na programação modular é mover essas definições para seus próprios arquivos-fonte (arquivos .c).

Isso cria uma estrutura limpa de três partes: o header declara as funções, um arquivo de origem separado as define e a função main simplesmente as utiliza. Veja como fica:

// 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;
}

Observe que math_utils.c inclui seu próprio cabeçalho. Isso garante que a definição da função corresponda à declaração — se elas não corresponderem, o compilador detectará o erro. O arquivo principal só precisa incluir o cabeçalho para usar a função; ele não precisa saber como add funciona internamente.

Essa separação mantém os detalhes de implementação ocultos e permite que você modifique a lógica da função sem tocar nos arquivos que usam essas funções.

challenge icon

Desafio

Fácil

Vamos construir um utilitário matemático simples organizando seu código na estrutura adequada de três arquivos: um cabeçalho para declarações, um arquivo de origem para implementações e um arquivo principal que os utiliza.

Você criará três arquivos:

  • math_ops.h: Seu arquivo de cabeçalho contendo as declarações de função para duas operações: multiply e subtract. Ambas as funções recebem dois inteiros e retornam um inteiro. Não se esqueça de incluir guards usando o símbolo MATH_OPS_H.
  • math_ops.c: Seu arquivo de origem contendo as implementações reais de multiply e subtract. Este arquivo deve incluir seu próprio cabeçalho para garantir que as declarações correspondam às definições.
  • main.c: Seu arquivo principal que inclui o cabeçalho e usa ambas as funções para realizar cálculos.

A função multiply deve retornar o produto de dois inteiros, e subtract deve retornar o primeiro inteiro menos o segundo.

Você receberá duas entradas inteiras: a e b.

Em sua função principal, imprima os resultados de ambas as operações em linhas separadas:

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

Por exemplo, com as entradas 8 e 3, a saída seria:

Product: 24
Difference: 5

Folha de consulta

As definições de função podem ser movidas do arquivo principal para arquivos de origem separados (arquivos .c), criando uma estrutura modular de três partes:

  • Arquivo de cabeçalho (.h): Contém declarações de função
  • Arquivo de origem (.c): Contém definições de função
  • Arquivo principal (main.c): Usa as funções

Exemplo de estrutura:

// 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;
}

O arquivo de origem (.c) deve incluir seu próprio cabeçalho para garantir que a definição da função corresponda à declaração. O arquivo principal só precisa incluir o cabeçalho para usar as funções, mantendo os detalhes de implementação ocultos.

Experimente você mesmo

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

int main() {
    int a, b;
    scanf("%d", &a);
    scanf("%d", &b);
    
    // TODO: Chame a função multiply com a e b, armazene o resultado
    
    // TODO: Chame a função subtract com a e b, armazene o resultado
    
    // TODO: Imprima os resultados no formato:
    // Product: {result of multiply}
    // Difference: {result of subtract}
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Object Oriented Programming