462 Stimmen

Was ist eine externe und eine interne Verknüpfung?

Ich möchte die externe Verknüpfung und die interne Verknüpfung und deren Unterschied verstehen.

Ich möchte auch die Bedeutung von

const Variablen sind standardmäßig intern verknüpft, es sei denn, sie sind anders als extern .

14voto

Nan Xiao Punkte 15463

Ich denke Interne und externe Verknüpfung in C++ gibt eine klare und prägnante Erklärung:

Eine Übersetzungseinheit bezieht sich auf eine Implementierungsdatei (.c/.cpp) und alle Header-Dateien (.h/.hpp), die sie enthält. Wenn ein Objekt oder eine Funktion innerhalb einer solchen Übersetzungseinheit eine interne Verknüpfung hat, dann ist dieses spezifische Symbol nur für den Linker innerhalb dieser Übersetzungseinheit sichtbar. Wenn ein Objekt oder eine Funktion eine externe Verknüpfung hat, kann der Linker es auch sehen wenn er andere Übersetzungseinheiten bearbeitet. Das Schlüsselwort static, wenn es im globalen Namensraum verwendet wird, erzwingt, dass ein Symbol eine interne Verknüpfung hat. Das extern-Schlüsselwort führt zu einem Symbol mit externer Verknüpfung.

Der Compiler gibt die Verknüpfung von Symbolen so vor, dass:

Nicht-konstante globale Variablen haben standardmäßig eine externe Verknüpfung
Globale Const-Variablen haben standardmäßig eine interne Verknüpfung
Funktionen haben standardmäßig eine externe Verknüpfung

10voto

Color Punkte 737

Grundsätzlich

  • extern linkage Variable ist in allen Dateien sichtbar
  • internal linkage ist in der Einzeldatei sichtbar.

Erklärung: const-Variablen sind standardmäßig intern verknüpft, sofern sie nicht als extern deklariert sind.

  1. Standardmäßig ist die globale Variable external linkage
  2. sondern, const globale Variable ist internal linkage
  3. extra, extern const globale Variable ist external linkage

Ein ziemlich gutes Material über die Verknüpfung in C++

http://www.goldsborough.me/c/c++/linker/2016/03/30/19-34-25-interne_und_externe_Verknüpfung_in_c++/

8voto

arun pal Punkte 607

Die Verknüpfung bestimmt, ob Bezeichner mit identischen Namen auf dasselbe Objekt, dieselbe Funktion oder eine andere Einheit verweisen, auch wenn diese Bezeichner in verschiedenen Übersetzungseinheiten vorkommen. Die Verknüpfung eines Bezeichners hängt davon ab, wie er deklariert wurde. Es gibt drei Arten von Verknüpfungen:

  1. Interne Verknüpfung : Bezeichner können nur innerhalb einer Übersetzungseinheit gesehen werden.
  2. Externe Verknüpfung : Bezeichner können in anderen Übersetzungseinheiten gesehen werden (und es kann auf sie verwiesen werden).
  3. Keine Verknüpfung : Identifikatoren können nur in dem Bereich gesehen werden, in dem sie definiert sind. Die Verknüpfung hat keinen Einfluss auf den Geltungsbereich

Nur C++ : Sie können auch eine Verknüpfung zwischen C++- und Nicht-C++-Codefragmenten herstellen, was als Sprachverknüpfung .

Quelle: IBM-Programmverknüpfung

2voto

Saurabh Raoot Punkte 1035

In C++

Jede Variable im Dateisystem, die nicht in einer Klasse oder Funktion verschachtelt ist, ist in allen Übersetzungseinheiten eines Programms sichtbar. Dies wird als Außenanbindung weil der Name zum Zeitpunkt des Linkens für den Linker überall sichtbar ist, auch außerhalb dieser Übersetzungseinheit.

Globale Variablen und gewöhnliche Funktionen haben eine externe Verknüpfung.

Statisch Objekt- oder Funktionsname im Dateisystem ist lokal für die Übersetzungseinheit. Das wird genannt als Interne Verknüpfung

Die Verknüpfung bezieht sich nur auf Elemente, die zum Zeitpunkt des Verweises/Ladens Adressen haben; daher haben Klassendeklarationen und lokale Variablen keine Verknüpfung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X