Если вы не определите структуру в заголовке, вы получите непрозрачный указатель , так что все, что находится внутри этой структуры, будет скрыто от других единиц перевода.
Вы всегда можете объявить некоторые функции доступа в заголовке
typedef struct estado Estado; // <- Not a pointer
Estado *alloc_estado(void);
void print_row(Estado *e, int i);
// ...
Определить их в .c
файле
#include "estado.h"
struct estado
{
char modo;
char jogador;
char matriz[8][8];
int pretas;
int brancas;
};
void print_row(Estado *e, int i)
{
printf("%s\n", e->matriz[i]);
}
// ...
И использовать в main
#include "estado.h"
int main(void)
{
Estado *pes = alloc_estado();
// ...
print_row(pes, 1);
// ...
free(pes);
}