Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Como a função alocamapa() pode receber um ponteirode de outro arquivo .c?

No arquivo fogefoge.c é declarado a struct "MAPA m" e as funções desse arquivo .c recebe seu ponteiro! Já no arquivo mapa.c a função "alocamapa(MAPA* m)" recebe o ponteiro da struct m.

Não entendi como a função alocamapa recebe o ponteiro de uma struct que foi declarada em outro arquivo .c.

2 respostas
solução!

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:

  1. 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);
    
  2. 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...
    
  3. 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 ✓.

Muito obrigado mano ajudou bastante!