Arbeiten in C++ mit Bibliotheken und ihren Dokumentationen
Was ist eine Bibliothek?
Eine Programmbibliothek ist eine Sammlung von Hilfsfunktionen, die von Programmen angefordert werden.
Es gibt über die Programmiersprachen hinweg viele verschiedene Verteilungsformen: Java .jar-Dateien, Python .egg-Dateien, Ordner mit Dateien drin, …
Bestandteile einer Bibliothek
- Deklarationen im Kopf (.h, .hpp)
- Implementierung in Quelle (.c, .cpp, .cxx)
- Kompilat als Objekt (.o, .so, .a, .dll, .lib, .dylib)
- Dokumentation
Insbesondere bei proprietären Bibliotheken sind die Quellen geheim, ausgeliefert werden nur die Kompilate.
Achtung: Eine .dll-Datei heißt auch "Bibliothek".
Speicherort der Dateien
Es gibt in C++ keinen offiziellen Standard, wo diese Dateien zu lagern sind.
- Zur Übersetzungszeit muss der Compiler wissen, wo die Header sind.
- Zum Binden muss der Linker wissen, wo die Objekte sind.
- Die Laufzeitumgebung muss wissen, wo die dynamischen Bibliotheken (.so, .dll, .dylib) sind.
Der Entwickler muss für das Projekt alle Pfade konfigurieren.
Ausnahme: Die meisten Programmiersprachen werden mit einer Reihe von Basisfunktionen ausgeliefert. Die Gesamtheit dieser Funktionen wird oft (zumindest in C++, Python) „Standardbibliothek“ genannt. Der Entwickler kann davon ausgehen, dass die Standardbibliothek vom Compiler mitgebracht wird (wiederum Ausnahme: Eingebettete Systeme).
Navigieren in Dokumentationen
Viele Dokumentationen werden aus den Kommentaren im Quelltext automatisch erzeugt (Javadoc, doxygen, Sphinx,…).
Beispiel: cppreference (MediaWiki)
Beispiel: Python (Sphinx)
Beispiel: OpenCV (doxygen)
Beispiel: Unreal Engine (proprietär)
Unterstützung durch Entwicklungsumgebung
- Syntax-Hervorhebung (reservierte Wörter, Klammern)
- einfache Code-Vervollständigung (bekannte Bezeichner, Methoden, freie Funktionen)
- Schnellzugriff auf externe Dokumentation
- ordentliche Code-Vervollständigung (mit Berücksichtigung von Typen)
- eingebettete Dokumentation (z.B. aus Kommentaren)
- Refactoring (Verfolgen von Referenzen, Code-Extraktion)
- erweiterte Code-Analyse und Code-Vervollständigung (z.B. mit Textgeneratoren)
Unabhängig davon: Debugger