Olá João! Tudo bem?
Em C, para que funções em arquivos diferentes possam interagir com as mesmas estruturas de dados, utilizamos arquivos de cabeçalho (.h
). Esses arquivos atuam como uma ponte entre os diferentes arquivos .c
, permitindo que compartilhem informações sobre tipos de dados e assinaturas de funções.
No seu caso, o arquivo mapa.h
contém a definição da struct mapa
e as declarações das funções relacionadas ao mapa. Quando você inclui #include "mapa.h"
no seu arquivo fogefoge.c
, você está dizendo ao compilador que ele deve utilizar as definições e declarações presentes nesse arquivo de cabeçalho. Isso permite que o fogefoge.c
saiba como é a estrutura MAPA
e quais funções estão disponíveis para manipular essa estrutura, mesmo que a implementação dessas funções esteja em mapa.c
.
Aqui está um exemplo prático:
Definição da struct e funções no arquivo de cabeçalho (mapa.h
):
struct mapa {
char** matriz;
int linhas;
int colunas;
};
typedef struct mapa MAPA;
void alocamapa(MAPA* m);
void lemapa(MAPA* m);
void liberamapa(MAPA* m);
void imprimemapa(MAPA* m);
Implementação das funções no arquivo mapa.c
:
#include <stdio.h>
#include <stdlib.h>
#include "mapa.h"
void alocamapa(MAPA* m) {
m->matriz = malloc(sizeof(char*) * m->linhas);
for(int i = 0; i < m->linhas; i++) {
m->matriz[i] = malloc(sizeof(char) * m->colunas + 1);
}
}
// Outras funções...
Utilização no arquivo fogefoge.c
:
#include <stdio.h>
#include <stdlib.h>
#include "fogefoge.h"
#include "mapa.h"
int main() {
MAPA m;
lemapa(&m);
// Outras operações...
liberamapa(&m);
}
Ao compilar, você deve incluir ambos os arquivos .c
para que o compilador saiba onde encontrar todas as definições e implementações necessárias:
gcc fogefoge.c mapa.c -o fogefoge.out
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.