Compiler meckert nicht!



  • Hallo Forum!

    Ich habe eine .c-Datei mit folgendem Code:

    void Test(void) {
      printf("Hallo\n");    
    }
    

    Warum lässt sich aus dieser Datei ein Objektcode erzeugen, obwohl
    der Compiler doch garnicht die printf-Funktion kennen kann?
    Ich benutze gcc:
    gcc -c test.c

    Gibt es hierfür eine Erklärung oder bin ich nur ein Troll, 😉 der etwas nicht verstanden hat? Danke für alle pädagogischen Erklärungen! 👍



  • Weil beim Compüilieren die Funktionen nicht notwendigerweise bekannt werden müssen. Wichtig ist es beim Linken.

    Du kannst dogar sowas machen:

    int main(void) { 
      jjdhgszsajshdjaslk("Hallo\n", 3,45,6,7,1);     
    }
    

    Nur versuch das mal zu linken.

    Es passiert auch manhcmal, dass (vor allem alte) Compiler stdio.h und andere Headers sozusagen implizit includieren.



  • Ist es aber nicht so, dass der Compiler die Deklaration der Funktion kennen muss!
    Zwecks Syntaxprüfung, Übergabeparameter, Rückgabewert... 😕



  • Nicht in C. Da geht der Compiler, wenn die Funktion nicht bekannt ist, von einer Funktion aus, die int zurückgibt. Die Parameter sind in C ja sowieso mehr oder weniger wurscht.



  • Zero_Clamping schrieb:

    Ist es aber nicht so, dass der Compiler die Deklaration der Funktion kennen muss!
    Zwecks Syntaxprüfung, Übergabeparameter, Rückgabewert... 😕

    In C++ vielleicht, da ist aber C soz. grosszuegiger 🙂
    wie MFK sagte, wenn der Compiler die Funktion nicht kennt, geht er dann von einer int Funktion aus. Es wird nicht dann wegen den Parameter gemeckert, wenn der Compiler die Funktion kennt, ansonsten nicht.


Anmelden zum Antworten