Funktionsdeklaration && -Definition
-
Hallo!
Was mich wundert : Also z. B. ich habe die Datei main.c . In main.c versuche ich ohne Deklaration und Definition printf() aufzurufen --> Beim Compilieren sagt der Compiler nichts . Doch wenn es um das Linken geht , beschwert er sich erst darüber , dass er die Funktion nicht kennt. Meine Fragen :
1. Wieso ist beschwert es sich erst beim Linken?
2. Wie ist es möglich , dass der Compiler anhand der *.o - Datei weiß, dass die Funktion printf() nicht definiert ist... es ist doch reines Maschinencode..
-
1. eigentlich sollte er, wenn die stdio.h nicht included ist.
2. Wenn es der Linker ist, der macht weit mehr: Letztendlich rechnet er in die eizelnen Object files die effektiven Adressen ein, um das Target zu bauen und für printf() fehlt ihm der Einsprungpunkt.
-
In C(89) werden nicht bekannte Funktionen automatisch als "int f()" deklariert, daher ist das kein Compiler-Fehler (ich glaube, dies ist dann in C99 nicht mehr möglich).
Und der Linker sollte auch nur dann meckern, wenn du ihm die C Runtime Library nicht mitgegeben hast (-lc), denn für das Linken ist nur der Name der Funktion relevant (weder der Rückgabewert noch die Parameter).P.S: In der Objekt-Datei (.o) steht nicht nur reiner Maschinencode sondern insbesondere die Namen der noch zu referenzierenden Funktionen und globalen Variablen etc.