Hallo Ben,
Kann es sein, dass es in C erlaubt ist Funktionsprototypen
ohne die Parameter anzugeben?
z.B.
extern long func(); # im Header
long func(int i) { … } # in der .c Datei
ja das ist erlaubt und die funktionsdeclaration in C ist nicht
obligatorisch.
Es ist sogar noch schlimmer als Youssef es hier schreibt. Der c-Compiler braucht garkeine extern-deklarationen, er warnt vielleicht, wenn er die Funktion nicht kennt. Der Compiler „rät“ dann, welchen Typs die Parameter sein sollen.
Trifft er im selben C-File dann auf die echte Funktion und hat er falsch geraten, dann meldet er sich wieder.
Ist die Funktion aber in einer Library oder einem anderen C-File, dann kracht es womöglich zur Laufzeit, aber es erfolgt keine weitere Warnung (z.B. vom Linker)
Um ernsthaft Programme zu schreiben, sollte man die deklarationen daher sehr gewissenhaft und ausführlich nutzen, und vor allem den Warnlevel so hoch setzen, dass eine fremde Funktion sofort gemeldet wird.
Als junger Programmierer hatte ich keine Zeit dafür, für überflüssiges geschreibse, oder Einrückungen oder geschweifte Klammern bei 1-Statement-Ifs z.B… Heute, wo ich dafür bezahlt werde, habe ich keine Zeit, es zu lassen.
Gruß
achim