hallo Moe,
Ursprünglich war ein ein Funktionsaufruf in C (z.B. y = sin(x)einfach nur eine Anweisung an den Compiler,
- die übergeben Parameter (hier „x“)auf den Stack zu legen,
- Zu den Funktion (in diesem Falle „sin“) zu springen
- nach der Rückkehr mit dem Ergebnis irgendetwas anzufangen (hier nach y schreiben)
die Funktion muss dem Compiler dazu nicht bekannt sein, da er ja weiss, wieviel Bytes jeder Parameter groß ist.
später sucht der Linker, ob er eine Adresse für „sin“ findet, und alles ist prima.
Von daher kann man sich JEDE deklaration in C eigentlich schenken. Erst spätere C-Compiler spucken Warnungen oder Fehler aus. Warum?
!weil nicht alle Menschen perfekt sind!
Wenn eine Funktion (z.B. sin) einen Wert vom Typ double erwartet und zurückgibt, ich aber z.B. ein int gebe, so macht die Funktion mit diesem Wert Unsinn. Der Compiler kann dies nur erkennen, wenn er deren Deklaration kennt.
Und weil die Erfahrung zeigt, dass die Menschen nicht nur nicht perfekt sind, sonder auch, dass sie sich trotzdem dafür halten, stellen sich Compiler halt oftmals zickig an. Und gute Programmierer kasteien sich sogar damit, dass sie „Lint“, benutzen, ein Tool so alt wie die ersten C-Compiler, damit jeder obscurer Code auch sofort gepetzt wird.
Gruß
achim