Ich kann mir nicht helfen, doch würde ich euch gerne aktuell an einer kleinen Verwirrung meinerseits teilhaben lassen. (:
Wieso benötigt der Compiler (gcc, als auch clang) bei Pointer auf struct manchmal eine forward declaration - und manchmal nicht?
Zwei Beispiele:
Gegeben sei eine Funktion mit entsprechendem Prototyp (der ja typischerweise später dann im .h file schlummert):
Folgendes lässt sich ohne Warnung compilieren (abgesehen von [-Wunused-parameter]).
Code: Alles auswählen
struct s * func(struct s *);
struct s * func(struct s * p){ return (struct s *)0; }
Dies jedoch nicht!
Code: Alles auswählen
void func(struct s *);
void func(struct s * p){ return; }
Code: Alles auswählen
foo.c:2:18: warning: declaration of 'struct s' will not be visible outside of this function [-Wvisibility]
void func(struct s *);
^
foo.c:3:18: warning: declaration of 'struct s' will not be visible outside of this function [-Wvisibility]
void func(struct s * p){ return; }
^
foo.c:3:6: error: conflicting types for 'func'
void func(struct s * p){ return; }
^
foo.c:2:6: note: previous declaration is here
void func(struct s *);
^
2 warnings and 1 error generated.
Code: Alles auswählen
struct s;
void func(struct s *);
void func(struct s * p){ return; }