2015-03-19 73 views
5

Sto programmando in C negli ultimi anni e ho sviluppato l'abitudine di inserire il typedef della struct nel file di intestazione e di lasciare la sua definizione nel file di origine, in modo che altri possano usare il mio file senza farli incasinare le cose.C struct definition standard

// header file 
typedef struct s_example EXAMPLE 

// source file 
struct s_example { 
     // something 
}; 

c'è qualcosa di sbagliato a fare questo, devo far sapere agli altri quello che faccio con i miei struct?

mi sto solo chiedendo questo perché vedo un sacco di persone che mostrano tutto nel file di intestazione.

+6

Se tutto ciò che gestiscono è un puntatore, un tipo incompleto va bene. –

+1

Si noti inoltre che in C++, il 'typedef' non è necessario, dal momento che non si deve usare la parola chiave' struct' quando si fa riferimento al tipo di codice nella sorgente come si fa in C. – aruisdante

+0

Come è possibile che un utente sia in grado usare una struct se non riescono a vedere il formato/i campi? e una struct NON dovrebbe essere typedef'd .. Tale typedef'ing oscura solo il codice e ingombra lo spazio dei nomi del compilatore. Suggerimento: inserire il formato struct nel file di intestazione (e magari una dichiarazione extern SE altri programmi devono accedere a un'istanza di struct locale.) – user3629249

risposta

9

Lo svantaggio di avere solo la dichiarazione nel file di intestazione è che tutti gli altri file di origine che non includono la definizione del struct non possono istanziare un'istanza di quella struct, ma solo un puntatore ad esso. Questo perché, per gli altri file sorgente, il tuo struct è un incomplete type. Se ciò va bene per la tua applicazione, allora non c'è niente di sbagliato con solo una dichiarazione nell'intestazione.