Anzeigen: Delphi C++
Anzeigeeinstellungen

Verwendung von Include-Dateien

Aus RAD Studio XE2
Wechseln zu: Navigation, Suche

Nach oben zu Befehlszeilenhilfsprogramme - Index

In C++ haben Include-Dateien immer die Erweiterung .h.

Inhaltsverzeichnis

Suchalgorithmen für Include-Dateien

Der Compiler BCC32.exe sucht folgendermaßen nach Dateien, die in Ihren Quelltext mit der Direktive #include einbezogen sind:

  • Wenn Sie bei der Include-Anweisung einen Pfad und/oder ein Verzeichnis angegebenen haben, sucht der Compiler nur in diesem Pfad/Verzeichnis.
    Wenn Sie beispielsweise die folgende Anweisung angegeben haben:
    #include "c:\C++\include\vcl\vcl.h"
    muss sich die Header-Datei vcl.h im Verzeichnis C:\C++\include\vcl befinden.
    Wenn Sie die Anweisung:
    #include <vcl\vcl.h>
    angegeben haben, und Sie mit der Option Include-Suchpfad (-I) den Pfad C:\C++\include festlegen, muss sich die Datei vcl.h in C:\C++\include\vcl und nicht in C:\C++\include oder C:\vcl befinden.
  • Wenn Sie die Anweisung
    #include <somefile>
    in Ihren Quelltext aufnehmen, sucht der Compiler somefile nur in den Verzeichnissen, die mit der Option Include-Suchpfad (-I) angegeben sind.
  • Mit der Anweisung
    #include "somefile"
    in Ihrem Quelltext sucht der Compiler nach somefile in der folgenden Reihenfolge:
    1. In dem Verzeichnis, in dem die Datei mit der #include-Anweisung enthalten ist.
    2. In den Verzeichnissen der Dateien, die die gesuchte Datei einbeziehen (#include).
    3. Im aktuellen Verzeichnis.
    4. In den Verzeichnissen, die mit der Option Include-Suchpfad (-I) angegeben sind.

Suchalgorithmen für Bibliotheksdateien

Die Suchalgorithmen für Bibliotheksdateien entsprechen weitgehend den Suchalgorithmen für Include-Dateien:

  • Implizite Bibliotheken: Der C++-Compiler sucht implizite Bibliotheken nur in den angegebenen Bibliotheksverzeichnissen (Option Bibliothekspfad (-L)). Dies entspricht dem Suchalgorithmus für #include "somefile". Implizite Bibliotheksdateien werden vom Compiler automatisch in die Startobjektdatei (C0x.OBJ) gelinkt.
  • Explizite Bibliotheken: Wo der Compiler nach expliziten (benutzerspezifischen) Bibliotheken sucht, hängt teilweise davon ab, wie Sie die Bibliotheksdatei aufgeführt haben. Explizite Bibliotheken werden in der Befehlszeile oder in einer Projektdatei angegeben; diese Dateien haben die Namenserweiterung .LIB.
    • Wenn Sie den Dateinamen einer expliziten Bibliothek ohne Laufwerk oder Verzeichnis angeben (z.B. MYLIB.LIB), sucht der Compiler diese Bibliothek zuerst im aktuellen Verzeichnis. Wird sie dort nicht gefunden, sucht der Compiler in den mit der Option Bibliothekspfad (-L) festgelegten Verzeichnissen. Dies entspricht dem Suchalgorithmus für #include "somefile".
    • Wenn Sie eine benutzerspezifische Bibliothek mit Laufwerks- und/oder Verzeichnisangabe aufführen (wie z.B. c:\mystuff\mylib1.lib), sucht der C++-Compiler nur an der angegebenen Position und nicht in anderen Bibliotheksverzeichnissen.

C++-Anwendungen, die keine VCL-Formulare verwenden, sollten <vcl.h> nicht einbeziehen

Das heißt, Anwendungen (wie Konsolen-, Datenbank- oder Web/SOAP-Anwendungen), die keine GUI-Elemente aus der VCL (Visual Control Library) verwenden, sollten Folgendes nicht enthalten:

#include <vcl.h>

Der Header <vcl.h> bezieht die gesamte VCL-Formularbibliothek sowie die Delphi-RTL ein.

Mit den folgenden Vorgehensweisen können Sie Delphi-Typen (wie System.Set<>, System.Variant oder System.UnicodeString) in nicht-visuellen C++-Anwendungen einsetzen:

  • Geben Sie folgende Anweisung ein:
    #include <System.hpp>
  • Beziehen Sie die entsprechende Unit ein, in der die Typen und die API, die Sie verwenden möchten, deklariert sind. Zum Beispiel:
    #include <Classes.hpp>
    #include <SysUtils.hpp>

In früheren Versionen von C++Builder wurde der Header <vcl.h> als einfache Möglichkeit für den Zugriff auf die vom Delphi RTL-Package bereitgestellte Funktionalität in den Experten, Codebeispielen und Anwendungsbeispielen verwendet. In C++Builder XE2 (und in neueren Versionen) muss aber eine Unterscheidung zwischen UI-Frameworks (VCL und FMX) und Zielplattformen (Windows und OSX) möglich sein.

Deshalb wird empfohlen, den gesamten Nicht-VCL-Code, in dem der Header vcl.h einbezogen ist, so zu aktualisieren, dass stattdessen der entsprechende Header aus dem RTL-, SOAP-, Database- oder einem anderen Package einbezogen wird. Sie können dies durch Erstellen eines vorcompilierten Headers, der die für Ihren Code erforderlichen RTL-Header einbezieht, implementieren. Beispielsweise könnten Sie den Header <myheaders.h> erstellen, in dem die verschiedenen RTL-Header, wie Classes.hpp, SysUtils.hpp usw., einbezogen werden.

Siehe auch

Frühere Versionen
In anderen Sprachen