2015-03-19 15 views
5

Ich programmiere in C in den letzten Jahren und ich entwickelte eine Angewohnheit, die Typedef der Struktur in der Header-Datei zu setzen, und seine Definition in der Quelldatei zu lassen, so dass andere meine verwenden können Dateien ohne sie durcheinander zu bringen. C Struct Definition Standard

// header file 
typedef struct s_example EXAMPLE 

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

ist es etwas falsch es dies zu tun, sollte ich andere wissen lassen, was ich mit meinem structs tun?

Ich frage nur, weil ich viele Leute sehe, die alles in der Header-Datei zeigen.

+6

Wenn alles, was sie behandeln, ein Zeiger ist, ist ein unvollständiger Typ in Ordnung. –

+1

Beachten Sie außerdem, dass in C++ der 'typedef' nicht benötigt wird, da Sie das Schlüsselwort' struct' nicht verwenden müssen, wenn Sie in der Quelle auf den blanken Typ verweisen, wie in C. – aruisdante

+0

Wie kann ein Benutzer? eine Struktur zu verwenden, wenn sie das Format/die Felder nicht sehen können? und eine Struktur sollte NICHT typedef'd sein .. Eine solche typedef'ing verdeckt nur den Code und stört den Compiler-Namespace. Vorschlag: Platziere das struct-Format in der Header-Datei (und vielleicht eine extern-Anweisung, wenn andere Programme auf eine lokale struct-Instanz zugreifen müssen.) – user3629249

Antwort

9

Der Nachteil der nur die Deklaration in der Header-Datei ist, dass alle anderen Quelldateien, die nicht die Definition der struct enthalten, eine Instanz dieser struct nicht instanziieren können, sondern nur einen Zeiger darauf. Dies liegt daran, dass Ihre struct für diese anderen Quelldateien eine incomplete type ist. Wenn das für Ihre Anwendung in Ordnung ist, dann ist nichts falsch mit nur einer Deklaration in der Kopfzeile.