Da trilha de C Este conceito ainda não saiu como card do dia. ir para o card de hoje

C Módulos Intermediário

Compilação separada

Em C, programas grandes são organizados em múltiplos arquivos .c, cada um compilado separadamente em um arquivo objeto (.o). Depois, o linker junta esses objetos em um único executável. Essa técnica é chamada compilação separada.

Para que um arquivo .c use funções ou variáveis definidas em outro, é preciso uma declaração visível. Isso é feito com arquivos de cabeçalho (.h) que contêm protótipos de funções e declarações extern de variáveis globais. A palavra-chave extern indica que a variável existe em outro lugar, enquanto static restringe o escopo ao próprio arquivo (visibilidade interna).

Um Makefile automatiza o processo: descreve as dependências entre fontes, objetos e o executável final, e executa apenas os comandos necessários quando algo muda. Assim, a compilação separada se torna prática e rápida.

Pontos-chave

  • Arquivos .h contêm declarações (protótipos, extern, macros) e são incluídos com #include.
  • Arquivos .c contêm as definições (corpo das funções, variáveis globais).
  • extern declara uma variável ou função definida em outro arquivo; static limita a visibilidade ao próprio arquivo.
  • Cada .c é compilado independentemente para gerar um .o; o linker une os .o no executável.
  • Um Makefile descreve regras de compilação e evita recompilar tudo a cada mudança.
main.c
#include <stdio.h>
#include "math_utils.h"

int main(void) {
    int a = 10, b = 3;
    printf("soma: %d\n", soma(a, b));
    printf("multiplicacao: %d\n", multiplica(a, b));
    return 0;
}

Exercícios

  1. 1
    Fácil

    Separando saudação em módulo

    Crie um programa que imprime uma saudação. A função imprime_saudacao deve ser definida em saudacao.c e declarada em saudacao.h. O main em main.c chama essa função.

    Resolver
  2. 2
    Médio

    Contador global com extern

    Crie um contador global int contador definido em contador.c e declarado como extern em contador.h. A função incrementa() aumenta o contador e o retorna. O main chama incrementa() três vezes e imprime o valor final.

    Resolver
  3. 3
    Desafio

    Módulo matemático com Makefile

    Crie um módulo matematica com as funções soma, subtrai e multiplica. Cada função deve ser definida em matematica.c e declarada em matematica.h. O main lê dois inteiros, chama as três funções e imprime os resultados no formato soma: X, subtracao: Y, multiplicacao: Z. Escreva um Makefile que compile e ligue tudo.

    Resolver

Continue estudando