Scusa un attimo, tu vuoi dichiarare un array di tipo struct prova nel file sorgente in "filea.c" dopo aver definito la struttura in questione e poi nel file sorgente fileb.c vuoi fare riferimento a questo array globale? Se è così, è ovvio che non vada perché hai utilizzato una direttiva include per includere un file sorgente .c. Tra l'altro, stai compilando solo filea.c? Quando vai a compilare, il preprocessore esegue le direttive include e il tuo filea.c si trasforma in
codice:
extern struct prova ccc[];
struct prova{
int a;
int b;
};
struct prova ccc[];
int main(){
...
}
che giustamente non potrebbe mai essere compilato senza errore perché alla prima riga stai facendo riferimento ad una variabile esterna di tipo struct prova che non hai ancora definito (visto che lo fai nelle righe di sotto). Se vuoi fare una cosa del genere devi realizzare un header file in cui metterci la dichiarazione della struct e poi includerlo in entrambi i file sorgenti.
codice:
/* header.h */
struct prova {
int a;
int b;
};
codice:
/* filea.c */
#include "header.h"
struct prova ccc[];
int main(){
...
}
codice:
/* fileb.c */
#include "header.h"
extern struct prova ccc[];
Chiaramente l'header file deve stare nella stessa directory dei sorgenti, a meno che tu non lo scriva nella directory predefinita degli header file del tuo compilatore, caso in cui devi sostituire " " con < >
non vorrei sbagliarmi ma forse in standard c devi dichiarare le dimensioni degli array o altrimenti invece di [] metti * così crei un puntatore che poi allocherai dinamicamente e che è sostanzialmente la stessa cosa!
Questo è giusto ma non riguarda l'errore che aveva. Comunque sì, un array in C non si dichiara in quel modo, o almeno non è la maniera più corretta (e sensata).