2015-03-19 13 views
5

Programuję w C w ciągu ostatnich kilku lat i stworzyłem nawyk, aby umieścić typedef struktury w pliku nagłówkowym i pozostawić jego definicję w pliku źródłowym, aby inni mogli używać mojego pliki bez pozwolenia im na bałagan.C standard definicji struktury

// header file 
typedef struct s_example EXAMPLE 

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

jest coś nie tak, że robi to, mam niech inni wiedzą, co zrobić z moim elemencie?

po prostu pytam, ponieważ widzę wiele osób pokazujących wszystko w pliku nagłówkowym.

+6

Jeśli wszystko, co robią, jest wskaźnikiem, niekompletny typ jest w porządku. –

+1

Należy również zauważyć, że w C++, 'typedef' jest niepotrzebny, ponieważ nie trzeba używać słowa kluczowego' struct', gdy odwołujesz się do gołego typu w źródle, tak jak robisz to w C. – aruisdante

+0

Jak użytkownik może być w stanie używać struct, jeśli nie widzą formatu/pól? a struktura NIE powinna być wpisywana na klawiaturze. Takie typowanie po prostu zasłania kod i zaśmieca przestrzeń nazw kompilatora. Zaproponuj: umieść format struct w pliku nagłówkowym (i być może zewnętrzną instrukcję, jeśli inne programy potrzebują dostępu do lokalnej instancji struct.) – user3629249

Odpowiedz

9

Wadą tylko deklaracji w pliku nagłówkowym jest to, że wszystkie inne pliki źródłowe, które nie zawierają definicji struct, nie mogą utworzyć instancji tej struct, a jedynie wskaźnik do niej. Dzieje się tak, ponieważ dla innych plików źródłowych twój struct jest incomplete type. Jeśli jest to w porządku dla twojej aplikacji, nie ma nic złego w samej deklaracji w nagłówku.