ich wikipedia auf C/C++ Prototype Aussagen zu lesen und ich bin verwirrt:Zweck der C/C++ Prototypen
Wikipedia sagen: „Durch den Funktionsprototyp einschließlich, informieren Sie den Compiler, dass die Funktion‚fac‘nimmt ein Integer-Argument und Sie ermöglichen dem Compiler, diese Art von Fehlern zu erfassen. "
und verwendet die unten als Beispiel:
#include <stdio.h>
/*
* If this prototype is provided, the compiler will catch the error
* in main(). If it is omitted, then the error will go unnoticed.
*/
int fac(int n); /* Prototype */
int main(void) { /* Calling function */
printf("%d\n", fac()); /* ERROR: fac is missing an argument! */
return 0;
}
int fac(int n) { /* Called function */
if (n == 0)
return 1;
else
return n * fac(n - 1);
}
Aber der Funktionsdefinition der aufgerufenen Funktion enthält bereits alle die Information, dass der Prototyp der Compiler sagt, warum also nicht der Compiler ableiten diese Informationen aus der Definition der aufgerufenen Funktion, da sie identische Aussagen/Informationsschreiben für den Brief enthalten?
Was fehlt mir? Scheint wie zusätzliche Arbeit für keinen offensichtlichen Gewinn.
Bearbeiten: Danke Jungs. Ich nahm an, dass die Compiler Multi-Pass waren, denke ich. Ich bin verwöhnt mit aktuellen Sprachen wie Python. Es macht Sinn, da es so alt ist, dass man etwas Kludges braucht, um Dinge in einem einzigen Durchgang genau zu machen. Es scheint mir jetzt offensichtlicher. Offensichtlich erfordert es ziemlich genaues Wissen darüber, wie der Compiler verknüpft und kompiliert.
Beachten Sie, dass dieser Wikipedia-Artikel falsche Dinge enthält. Sie können auf der Diskussionsseite sehen, wie einige Leute es einfach nicht korrigieren lassen. Ich habe das aufgegeben. –
Deshalb definiere ich Funktionen, bevor sie aufgerufen werden (jedenfalls in der gleichen Quelldatei). Dadurch entfällt die separate Deklaration, obwohl mein Code "rückwärts" lautet. –