Frage zu Modularem Programmieren



  • Hi,
    ich bin gerade beim C Lernen an dem Punkt angekommen, wo ich nicht mehr jede neue Funktion in die gleiche Datei schreiben möchte, also habe ich mir Modulares Programmieren angeschauten und bin dabei auf folgende Frage gestoßen:

    Ich benutze eine Funktion, die nicht in der aktuellen Datei steht, meinetwegen eine aus der mit C mitgelieferten Library. Dazu binde ich mit #include eine Headerdatei ein. Nun passiert da jetzt doch nichts anderes, als wenn ich irgendwelche Funktionen- und Variablendeklarationen manuell an den Anfang der Datei geschrieben hätte. Sprich: Die Funktionen selbst sind immernoch nicht da. Auch ist eine Headerdatei ja nicht auf irgendeine Weise mit "ihrer" Codedatei verknüpft.

    Also: Wie gelange ich dann letztendlich zu der Funktion, die ich aufrufen will?

    Vielen Dank schonmal,

    plizzz



  • plizzz schrieb:

    Also: Wie gelange ich dann letztendlich zu der Funktion, die ich aufrufen will?

    Der Compiler selber interessiert es nicht ob eine Funktion wirklich exisitert. Solange sie deklariert ist kannst du die aufrufen. Erst der Linker sorgt dafür, dass alle Abhängigkeiten vorhanden sind. Dieser hängt auch die C Libs an deine ausführbare Datei. Das kann man je nach Linker den man verwendet natürlich auch ausschalten und dann sind Funktionen wie printf nicht mehr bekannt.



  • O wenn mir das nur damals jemand so deutlich gesagt hätte, als ich das gefragt habe... 🙂
    Der Maschinen-Code der Funktionen steckt in Datein, die üblicherweise .a oder .lib am Ende im Namen haben.



  • Und wie findet der Linker die Datei, die ich irgendwo in einer .c Datei definiert habe? Durchsucht er einfach die Verzeichnisse nach .c Dateien und schaut diese durch?



  • plizzz schrieb:

    Und wie findet der Linker die Datei, die ich irgendwo in einer .c Datei definiert habe? Durchsucht er einfach die Verzeichnisse nach .c Dateien und schaut diese durch?

    Nein, du kannst alle .c Dateien getrennt kompilieren, normal bekommst du dann Dateien mit einer Endung wie .o oder .obj
    In einem zweiten Schritt setzt du diese dann zu dem fertigen Programm zusammen, das macht man mit dem Linker (häufig bietet der Compiler die Möglichkeit den Linker für einen aufzurufen bzw. hat diesen integriert).

    Wenn du genaueres wissen willst musst du uns sagen was für einen Compiler du benutzt.



  • Ich benutze Visual C++ von Microsoft. Allerdings habe ich mir noch kein einziges Wort über die Funktionsweise von Linker etc. durchgelesen. Deshalb werde ich erstmal das tun und dann nochmal nachfragen, wenn ich Fragen habe. Ansonsten könnte es sein, dass eure ganzen Erklärungen hier für die Katz sind und es sich eh erledigt, wenn ich bei diesem Kapitel angekommen bin.

    Danke jedenfalls für eure Hilfe,

    plizzz


Anmelden zum Antworten