Richtlinie einschließen – Wikipedia

Dateityp in der Computerprogrammierung

Viele Programmiersprachen und andere Computerdateien haben eine Richtlinie, die oft genannt wird include (manchmal copy oder import), wodurch der Inhalt einer zweiten Datei in die Originaldatei eingefügt wird. Diese enthaltenen Dateien werden als Copybooks oder bezeichnet s. Sie werden häufig verwendet, um das physische Layout von Programmdaten, Verfahrenscode und / oder Weiterleitungsdeklarationen zu definieren und gleichzeitig die Kapselung und die Wiederverwendung von Code zu fördern.

Zweck[edit]

Das include Mit der Direktive können Codebibliotheken entwickelt werden, die Folgendes unterstützen:

  • Stellen Sie sicher, dass jeder Benutzer in einem Programm dieselbe Version einer Datenlayoutdefinition oder eines Verfahrenscodes verwendet.
  • leichtes Querverweisen, wenn Komponenten in einem System verwendet werden,
  • Ändern Sie Programme bei Bedarf einfach (es muss nur eine Masterdatei bearbeitet werden, anstatt für jede Instanz einen identischen Datentyp zu verwenden oder eine Funktion aufzurufen)
  • Sparen Sie Zeit, indem Sie keine umfangreichen Datenlayouts codieren müssen (geringfügig, aber nützlich).

Eine Beispielsituation, die von der Verwendung einer Include-Direktive profitiert, ist der Verweis auf Funktionen in einer anderen Datei. Angenommen, wir haben eine Funktion add in einer Datei, die dann deklariert wird (mit einem Funktionsprototyp) und dann in einer zweiten Quelldatei wie folgt referenziert wird:

int add(int, int);

int triple(int x)
{
    return add(x, add(x, x));
}

Ein Nachteil dieser Methode ist, dass der Prototyp in allen Dateien vorhanden sein muss, die die Funktion verwenden. Ein weiterer Nachteil ist, dass diese Prototypen aktualisiert werden müssen, wenn der Rückgabetyp oder die Argumente der Funktion geändert werden. Durch das Einfügen des Prototyps in eine einzelne, separate Datei werden diese Probleme vermieden. Angenommen, der Prototyp wird in die Datei verschoben add.hkann die zweite Quelldatei dann werden:

#include "add.h"

int triple(int x)
{
    return add(x, add(x,x));
}

Jedes Mal, wenn der Code kompiliert wird, werden die neuesten Funktionsprototypen erstellt add.h werden in die Dateien aufgenommen, die sie verwenden, um potenziell katastrophale Fehler zu vermeiden.

Sprachunterstützung[edit]

C / C ++[edit]

In C und C ++ ist die #include Die Präprozessor-Direktive bewirkt, dass der Compiler diese Zeile durch den gesamten Text des Inhalts der benannten Quelldatei (falls in Anführungszeichen: “”) oder des benannten Headers (falls in spitzen Klammern enthalten: <>) ersetzt.[1] Beachten Sie, dass ein Header keine Quelldatei sein muss.[2] Die Einbeziehung dieser enthaltenen Inhalte wird rekursiv bis zu einer durch die Implementierung definierten Verschachtelungsgrenze fortgesetzt. Header müssen keine Namen haben, die Dateien entsprechen: In C ++ werden Standard-Header normalerweise mit Wörtern wie “Vektor” identifiziert #include Während in C Standard-Header Bezeichner in Form von Dateinamen mit der Erweiterung “.h” haben, wie in #include . Eine “Quelldatei” kann eine beliebige Datei mit einem Namen beliebiger Form sein, wird jedoch am häufigsten mit der Erweiterung “.h” benannt und als “Header-Datei” bezeichnet (manchmal “.hpp” oder “.hh”, um C ++ zu unterscheiden Header), obwohl auch Dateien mit den Erweiterungen .c, .cc und .cpp enthalten sein können (insbesondere in der Single Compilation Unit-Technik), und manchmal werden auch andere Erweiterungen verwendet.

Diese beiden Formen von #include Die Direktive kann auf implementierungsdefinierte Weise festlegen, welcher Header oder welche Quelldatei eingeschlossen werden soll. In der Praxis wird normalerweise nach den spitzen Klammern gesucht Quelldaten in einem Standardsystemverzeichnis (oder einer Reihe von Verzeichnissen) und sucht dann während des Formulars nach Quelldateien in lokalen oder projektspezifischen Pfaden (angegeben in der Befehlszeile, in einer Umgebungsvariablen oder in einem Makefile oder einer anderen Build-Datei) mit Anführungszeichen wird nicht in einem Standardsystemverzeichnis gesucht, sondern nur in lokalen oder projektspezifischen Pfaden.[3] Falls es keinen Konflikt gibt, kann das Formular mit spitzen Klammern auch verwendet werden, um projektspezifische Includes anzugeben. Dies wird jedoch als schlechte Form angesehen. Die Tatsache, dass Header nicht mit Dateien übereinstimmen müssen, ist in erster Linie eine Implementierungstechnik und wird verwendet, um die Erweiterung .h beim Einschließen von C ++ – Standardheadern wegzulassen. im allgemeinen Sprachgebrauch bedeutet “Header” “Header-Datei”.

Zum Beispiel:

#include   // Include the contents of the standard header 'stdio.h' (probably a file 'stdio.h').
#include   // Include the contents of the standard header 'vector' (probably a file 'vector.h').
#include "user_defined.h"  // Include the contents of the file 'user_defined.h'.

In C und C ++ können Probleme auftreten, wenn zwei (oder mehr) Include-Dateien beide dieselbe dritte Datei enthalten. Eine Lösung besteht darin, zu vermeiden, dass Include-Dateien andere Dateien enthalten. Möglicherweise muss der Programmierer der Originaldatei manuell zusätzliche Include-Anweisungen hinzufügen. Eine andere Lösung ist die Verwendung von Include-Wachen.[4]

COBOL[edit]

Mit COBOL (und auch mit RPG IV) können Programmierer Copybooks auf ähnliche Weise wie Header-Dateien in die Programmquelle kopieren, aber auch bestimmten Text in ihnen durch anderen Text ersetzen. Das COBOL-Schlüsselwort für die Aufnahme lautet COPYund der Austausch erfolgt mit dem REPLACING ... BY ... Klausel. Eine Include-Direktive ist in COBOL seit COBOL 60 vorhanden, wurde jedoch gegenüber dem Original geändert INCLUDE[5] zu COPY bis 1968.[6]

Fortran[edit]

Fortran benötigt keine Header-Dateien an sich. Fortran 90 und höher weist jedoch zwei verwandte Funktionen auf: include Anweisungen und Module. Ersteres kann verwendet werden, um eine gemeinsame Datei mit Prozedurschnittstellen gemeinsam zu nutzen, ähnlich wie bei einem C-Header, obwohl die Angabe einer Schnittstelle nicht für alle Arten von Fortran-Prozeduren erforderlich ist. Dieser Ansatz wird nicht häufig verwendet. Stattdessen werden Prozeduren im Allgemeinen in Module gruppiert, auf die dann mit a verwiesen werden kann use Anweisung in anderen Code-Regionen. Bei Modulen werden Schnittstelleninformationen vom Header-Typ automatisch vom Compiler generiert und normalerweise in separate Moduldateien abgelegt, obwohl einige Compiler diese Informationen direkt in Objektdateien abgelegt haben. Die Sprachspezifikation selbst schreibt nicht die Erstellung zusätzlicher Dateien vor, obwohl Modulprozedurschnittstellen auf diese Weise nahezu universell verbreitet werden.

PHP[edit]

In PHP ist die include Die Direktive bewirkt, dass eine andere PHP-Datei aufgenommen und ausgewertet wird.[7] Ähnliche Befehle sind require, die bei Nichteinbeziehung eine schwerwiegende Ausnahme hervorruft und das Skript anhält,[8] und include_once und require_onceDies führt dazu, dass eine Datei nicht mehr aufgenommen oder erneut benötigt wird, wenn sie bereits aufgenommen oder benötigt wurde, wodurch das Problem der doppelten Einbeziehung des C vermieden wird.

Andere Sprachen[edit]

Es gibt viele Formen der Include-Richtlinie, wie zum Beispiel:

  • #include ... (C)
  • include ... (Fortran, MASM)
  • (HTML SSI)
  • import ...; (Java)
  • import ... from ... (JavaScript)
  • var ... = require("...") (JavaScript)
  • (JSP)
  • {$I ...} (UCSD Pascal, Turbo Pascal)
  • %include ... (PL / I)
  • import ... (Python)
  • /COPY QCPYLESRC,QBC (RPG IV – erstes Argument ist der Dateiname, zweites Argument ist das Heft)
  • extern crate ...; (Rost)

Moderne Sprachen (z. B. Haskell und Java) meiden normalerweise Copybooks oder Includes und bevorzugen Module und Import- / Exportsysteme für die Namespace-Steuerung. Einige dieser Sprachen (wie Java und C #) verwenden keine Vorwärtsdeklarationen. Stattdessen werden Bezeichner automatisch aus Quelldateien erkannt und direkt aus dynamischen Bibliothekssymbolen gelesen (in der Regel mit verwiesen) import oder using Direktiven), dh Header-Dateien werden nicht benötigt.

Siehe auch[edit]

Verweise[edit]

  1. ^ C11-Standard, 6.10.2 Aufnahme der Quelldatei, S. 164–165
  2. ^ C11-Standard, 7.1.2 Standard-Header, S. 22. 181, Fußnote 182: “Ein Header ist nicht unbedingt eine Quelldatei, ebenso wenig wie die < und > Begrenzte Folgen in Headernamen sind notwendigerweise gültige Quelldateinamen.
  3. ^ Stallman, Richard M. (Juli 1992). "Der C-Präprozessor" (PDF). Archiviert von das Original (PDF) am 4. September 2012. Abgerufen 19. Februar 2014.
  4. ^ Pike, Rob (21. Februar 1989), Hinweise zur Programmierung in C., Cat-v-Dokumentenarchivabgerufen 9 Dez. 2011
  5. ^ "COBOL-Anfangsspezifikationen für eine COmmon Business Oriented Language" (PDF). Verteidigungsministerium. April 1960. p. IX-9. Archiviert von das Original (PDF) am 12. Februar 2014. Abgerufen 11. Februar 2014.
  6. ^ "Die COPY-Erklärung". CODASYL COBOL Journal of Development 1968. Juli 1969. LCCN 73601243.
  7. ^ "einschließen". php.net. Die PHP-Gruppe. Abgerufen 20. Februar 2014.
  8. ^ "benötigen". php.net. Die PHP-Gruppe. Abgerufen 20. Februar 2014.

Externe Links[edit]