logo

externes Schlüsselwort in C

Das Schlüsselwort extern in C gilt für C-Variablen (Datenobjekte) und C-Funktionen. Grundsätzlich erweitert das Schlüsselwort extern die Sichtbarkeit der C-Variablen und C-Funktionen. Das ist wahrscheinlich der Grund, warum es „extern“ genannt wurde.

Obwohl die meisten Menschen wahrscheinlich den Unterschied zwischen der Deklaration und der Definition einer Variablen oder Funktion verstehen, wollen wir ihn der Vollständigkeit halber klären



    Durch die Deklaration einer Variablen oder Funktion wird lediglich erklärt, dass die Variable oder Funktion irgendwo im Programm vorhanden ist, der Speicher dafür jedoch nicht zugewiesen ist. Die Deklaration einer Variablen oder Funktion spielt eine wichtige Rolle – sie teilt dem Programm mit, welchen Typ sie haben wird. Im Fall von Funktion Bei Deklarationen werden dem Programm auch die Argumente, ihre Datentypen, die Reihenfolge dieser Argumente und der Rückgabetyp der Funktion mitgeteilt. Das ist also alles über die Erklärung.
  • Kommen zum Definition , wenn wir definieren Wenn Sie eine Variable oder Funktion verwenden, reserviert sie zusätzlich zu allem, was eine Deklaration tut, auch Speicher für diese Variable oder Funktion. Daher können wir uns die Definition als Obermenge der Deklaration (oder Deklaration als Teilmenge der Definition) vorstellen.
  • Extern ist eine Kurzbezeichnung für extern.
  • Die externe Variable wird verwendet, wenn eine bestimmte Datei auf eine Variable aus einer anderen Datei zugreifen muss.

Syntax von extern in C

Die Syntax zum Definieren einer externen Variablen in C besteht lediglich darin, das Schlüsselwort extern vor der Variablendeklaration zu verwenden.

extern data_type variable_name;>

Beispiel einer externen Variablen in C

C








Java-Tutorial
#include> > extern> int> a;>// int var; ->Deklaration und Definition> >// extern int var; ->Deklaration> > int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }>

>

>

Eigenschaften externer Variablen in C

  • Wenn wir extern some_data_type some_variable_name schreiben; Es wird kein Speicher zugewiesen. Es wird nur die Eigenschaft der Variablen bekannt gegeben.
  • Innerhalb der Datei sind mehrere Deklarationen externer Variablen zulässig. Dies ist bei automatischen Variablen nicht der Fall.
  • Die externe Variable sagt dem Compiler: Gehen Sie außerhalb meines Bereichs und Sie finden die Definition der Variablen, die ich deklariert habe.
  • Der Compiler glaubt, dass alles, was diese externe Variable sagt, wahr ist und erzeugt keinen Fehler. Der Linker gibt einen Fehler aus, wenn er feststellt, dass keine solche Variable vorhanden ist.
  • Wenn eine externe Variable initialisiert wird, wird ihr Speicher zugewiesen und sie gilt als definiert.

Eine Variable oder Funktion kann sein erklärt beliebig oft, aber es kann sein definiert nur einmal. (Bedenken Sie das Grundprinzip, dass Sie nicht zwei Speicherorte derselben Variablen oder Funktion haben können.)
Nun zurück zum externen Schlüsselwort. Betrachten wir zunächst die Verwendung von extern in Funktionen. Es stellt sich heraus, dass bei der Deklaration oder Definition einer Funktion das Schlüsselwort extern implizit angenommen wird. Wenn wir schreiben.

int foo(int arg1, char arg2);>

Der Compiler behandelt es wie folgt:

extern int foo(int arg1, char arg2);>

Da das Schlüsselwort extern die Sichtbarkeit der Funktion auf das gesamte Programm erweitert, kann die Funktion überall in allen Dateien des gesamten Programms verwendet (aufgerufen) werden, vorausgesetzt, diese Dateien enthalten eine Deklaration der Funktion. (Wenn die Deklaration der Funktion vorhanden ist, weiß der Compiler, dass die Definition der Funktion woanders existiert, und kompiliert die Datei.) Hier dreht sich also alles um das Äußere und die Funktionen.
Betrachten wir nun die Verwendung von extern mit Variablen. Zunächst einmal: Wie würden Sie? erklären eine Variable ohne definieren Es? Sie würden so etwas tun:

extern int var;>

Hier wurde eine ganzzahlige Variable namens var deklariert (sie wurde noch nicht definiert, daher wurde bisher kein Speicher für var zugewiesen). Und wir können diese Erklärung so oft machen, wie wir wollen.
Nun, wie würden Sie? definieren var? Sie würden Folgendes tun:

int var = 10;>

In dieser Zeile wurde eine Variable vom Typ Integer namens var deklariert Und definiert (denken Sie daran Definition ist die Obermenge von Erklärung ). Da dies ein ist Definition , wird auch der Speicher für var zugewiesen. Jetzt kommt die Überraschung. Als wir eine Funktion deklarierten/definierten, sahen wir, dass das Schlüsselwort extern implizit vorhanden war. Dies ist jedoch bei Variablen nicht der Fall. Wäre dies der Fall, würde ihnen niemals Speicher zugewiesen werden. Daher müssen wir das Schlüsselwort extern explizit einschließen, wenn wir Variablen deklarieren möchten, ohne sie zu definieren. Da das Schlüsselwort extern die Sichtbarkeit auf das gesamte Programm erweitert, können wir durch die Verwendung des Schlüsselworts extern mit einer Variablen die Variable überall im Programm verwenden, vorausgesetzt, wir fügen ihre Deklaration ein, wenn die Variable irgendwo definiert ist.
Versuchen wir nun, extern anhand von Beispielen zu verstehen.

Beispiel 1:

C




int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Dieses Programm wird erfolgreich kompiliert. var wird global definiert (und implizit deklariert).

Beispiel 2:

C




extern> int> var;> int> main(>void>)> {> >return> 0;> }>

>

>

Dieses Programm wird erfolgreich kompiliert. Hier wird nur var deklariert. Beachten Sie, dass var nie verwendet wird, sodass keine Probleme auftreten.

Beispiel 3:

C




extern> int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Dieses Programm löst einen Fehler bei der Kompilierung aus (während der Verknüpfungsphase, weitere Informationen hier), da var deklariert, aber nirgendwo definiert ist. Im Wesentlichen wird der Variable kein Speicher zugewiesen. Und das Programm versucht, den Wert einer Variablen, die überhaupt nicht existiert, auf 10 zu ändern.

Beispiel 4:

C




// As we are importing the file and henceforth the> // defination> #include 'somefile.h'> > // Declaring the same variable> extern> int> var;> >// int var;> >// It will throw compiler error as compiler will get> >// confused where the variable is defined> > int> main(>void>)> {> >var = 10;> >return> 0;> }> > // Now it will compile and run successfully>

>

>

Ausgabe:

10>

Notiz: Hier entsteht ein weiteres Szenario: Was passiert, wenn wir im obigen Codeausschnitt nicht mit extern deklarieren?

Unter der Annahme, dass somefile.h die Definition von var enthält, wird dieses Programm erfolgreich kompiliert. Das Schlüsselwort „extern“ wird für eine Variable verwendet, wenn wir die Variable in einer Datei deklarieren und in einer anderen Datei definieren. Wenn wir jedoch dieselbe Datei in die Datei importieren, in der sie deklariert ist, wird hier ein Compilerfehler generiert.

Dies liegt daran, dass wir immer noch das Schlüsselwort extern in der Datei verwenden müssen, in der wir diese Variable deklariert haben, um unserem Compiler mitzuteilen, dass diese Variable an einer anderen Stelle als nur definiert wurde. Es wird kein neuer Speicherplatz zugewiesen, da sonst ein weiterer Speicherblock erstellt wird Welche Verwendung des Schlüsselworts „extern“ ist nutzlos.

Beispiel 5:

C




extern> int> var = 0;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Glauben Sie, dass dieses Programm funktionieren wird? Nun, hier kommt eine weitere Überraschung von C-Standards. Sie sagen, dass ... wenn eine Variable nur deklariert wird und mit dieser Deklaration auch ein Initialisierer bereitgestellt wird, dann wird der Speicher für diese Variable zugewiesen – mit anderen Worten, diese Variable wird als definiert betrachtet. Daher wird dieses Programm gemäß dem C-Standard erfolgreich kompiliert und funktioniert.
Das war also ein vorläufiger Blick auf das Schlüsselwort extern in C.

Kurz gesagt können wir sagen:

  1. Eine Deklaration kann beliebig oft erfolgen, aber nur einmal definiert werden.
  2. Das Schlüsselwort extern wird verwendet, um die Sichtbarkeit von Variablen/Funktionen zu erweitern.
  3. Da Funktionen standardmäßig im gesamten Programm sichtbar sind, ist die Verwendung von extern in Funktionsdeklarationen oder -definitionen nicht erforderlich. Seine Verwendung ist implizit.
  4. Wenn extern mit einer Variablen verwendet wird, wird diese nur deklariert, nicht definiert.
  5. Als Ausnahme gilt: Wenn eine externe Variable mit der Initialisierung deklariert wird, wird sie auch als Definition der Variablen verwendet.