Zum Inhalt springen

FAQ Vorschlag: Header,Librarys und C-Strings


Guybrush Threepwood

Empfohlene Beiträge

Hab noch folgende Texte aus der alten FAQ in meinen privaten Nachrichten gefunden:

Was sind Header?

Funktionen und Datentypen werden in Headerdateien (*.h) deklariert. Diese Headerdateien müssen per #include <dateiname> oder #include "dateiname" in alle Quellcodedateien eingebunden werden, die Zugriff auf diese Funktionen benötigen. Wird dies nicht gemacht, tritt bei unbekannten Datentypen Fehlermeldungen der Art "Fehlende Speicherklasse oder Typbezeichner" und bei unbekannten Funktionen "nichtdeklarierter Bezeichner" auf.

Was sind Libraries?

Zusätzlich zu den Headerdateien werden oft noch statische Libraries (Bibliotheken) benötigt (*.lib, *.a), die entweder selbst die Funktionsdefinitionen enthalten oder auf dynamische Bibliotheken (*.dll, *.so) verweisen.

Diese Libraries müssen dem Linker angegeben werden, sonst tritt eine Fehlermeldung der Art: "unaufgeloester externer Verweis" auf.

C-Strings:

Strings werden in C als Array von Charactern angelegt:

char szString[10];

liefert einen String mit 10 (Index 0-9) Zeichen. Für die meisten Funktionen muss jeder String mit einem '\0' als letztes Zeichen abgeschlossen werden.

Dies geschieht bei den meisten Funktionen automatisch. Nur wenn man die

Zeichen selber festlegt sollte man daran denken, da sonst Speicherüberläufe

stattfinden können.

Strings können nicht über den == Operator miteinanderverglichen werden,

da so nur ihre Startadressen verglichen werden. Um solche Vergleiche

durchzuführen gibt es verschiedene Funktionen, z.B. strcmp(), die in einer C

Refernez oder hier auf dem Board nachgelesen werden können.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Original geschrieben von Guybrush Threepwood

Was sind Libraries?

Zusätzlich zu den Headerdateien werden oft noch statische Libraries (Bibliotheken) benötigt (*.lib, *.a), die entweder selbst die Funktionsdefinitionen enthalten oder auf dynamische Bibliotheken (*.dll, *.so) verweisen.

Das stimmt so nicht oder ist zumindest unglücklich formuliert: Dynamische Libraries werden direkt mit den Objekt-Dateien zu einer ausführbaren Datei gelinkt und nicht über eine statische Bibliothek als Umweg. Das Nachladen der entsprechenden Funktionen aus den Shared-Libraries wird dann zur Laufzeit durch den dynamischen Linker/Loader durchgeführt.

Ob dynamisch oder statisch gelinkt wird, läßt sich durch Compiler/Linker Switches beeinflussen.

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das verstehe ich jetzt nicht so richtig.

Mal angenommen ich erstelle mir unter Windows eine DLL die eine Funktion exportiert. Wenn ich diese Linke bekomme ich die .dll und die .lib.

Danach erstelle ich mir ein Programm welches die Funktion per __declspec(dllimport) importiert. Dann muss ich dem Linker beim erstellen der Anwendung die .lib Datei angeben. Nach dem Erstellen benötigt die Exe aber die DLL.

Die andere mir bekannte Möglichkeit ist die Funktion zur Laufzeit der Exe aus der DLL zu laden, dann benötige ich die .lib nicht zum linken.

D.H. doch das ich entweder die .lib und die .dll oder nur die .dll brauche.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

das ist in höchsten Maße Plattform und implementierungsabhängig. Bei allen Unixoiden Betriebssystemen sind nur die Shared Libraries notwendig gegen die die Binaries direkt gelinkt werden. Dies ist die grundlegende Idee hinter einer Shared Library.

Bei der von dir angesprochene Methode greifst Du direkt auf die Shared Lib zu. Dieses Verfahren findet beispielsweise bei der Einbindung von Plugins in ein Programm Anwendung.

Beim Linken von Programmen ist es für den Programmierer transparent, ob nun statisch oder shared gelinkt wird. Ein zusätzliches Handling der Shared Libraries innerhalb des Programms ist hier nicht notwendig (wie gelinkt wird, läßt sich beispielsweise über die Angabe von Flags der art "-static" oder "-shared" beeinflussen).

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...