Globale Variable
Im Computerprogrammierung, a Globale Variable ist eine Variable mit globaler Umfangwas bedeutet, dass es im gesamten Programm sichtbar ist (daher zugänglich), es sei denn beschattet. Der Satz aller globalen Variablen ist als die bekannt globale Umwelt oder Globaler Staat. Im kompilierte Sprachen, globale Variablen sind im Allgemeinen Statische Variablen, Deren Ausmaß (Lebenszeit) ist die gesamte Laufzeit des Programms, allerdings in interpretierte Sprachen (einschließlich Befehlszeileninterpreten) globalen Variablen werden im Allgemeinen dynamisch zugewiesen, wenn sie deklariert werden, da sie im Voraus nicht bekannt sind.
In einigen Sprachen sind alle Variablen standardmäßig global oder global, während in den meisten modernen Sprachen Variablen im Allgemeinen nur begrenztem Umfang haben lexikalischer BereichObwohl globale Variablen häufig verfügbar sind, indem eine Variable auf der obersten Ebene des Programms deklariert wird. In anderen Sprachen gibt es jedoch keine globalen Variablen; diese sind im Allgemeinen Modulare Programmierung Sprachen, die eine Modulstruktur erzwingen, oder Klassenbasierte objektorientierte Programmiersprachen das erzwingt eine Klassenstruktur.
Verwenden
Interaktionsmechanismen mit globalen Variablen werden genannt globale Umwelt (siehe auch Globaler Staat) Mechanismen. Das globale Umweltparadigma steht im Gegensatz zum lokalen Umweltparadigma, wo alle Variablen sind lokal ohne geteilte Erinnerung (und daher können alle Wechselwirkungen rekoniert werden Nachrichtenübergang).
Globale Variablen werden ausgiebig verwendet, um Informationen zwischen Codeabschnitten zu übergeben, die keine Anrufer-/Callee -Beziehung wie gleichzeitige Threads und Signalhandler freigeben. Sprachen (einschließlich c) wobei jede Datei einen impliziten Namespace definiert, beseitigt die meisten Probleme mit Sprachen mit einem globalen Namespace Obwohl einige Probleme ohne ordnungsgemäße Einkapselung bestehen können. Ohne ordnungsgemäße Sperrung (wie mit a Mutex) Code unter Verwendung globaler Variablen ist nicht Thread-safe mit Ausnahme von Leswerten nur in Leswerte in geschützter Speicher.
Umgebungsvariablen
Umgebungsvariablen sind eine Einrichtung, die von einigen bereitgestellt wird Betriebssysteme. Innerhalb des Betriebssystems Hülse (ksh in Unix, verprügeln in Linux, Command.com in DOS und Cmd.exe in Fenster) Sie sind eine Art Variable: Zum Beispiel wird in Unix- und verwandten Systemen eine gewöhnliche Variable zu einer Umgebungsvariablen, wenn die Export
Schlüsselwort wird verwendet. Programmcode außer Shells muss auf sie zugreifen API Anrufe, wie z.Getenv ()
und setEnv ()
.
Sie sind lokal zu dem Prozess, in dem sie festgelegt wurden. Das heißt, wenn wir zwei terminale Fenster (zwei verschiedene Prozesse, die auf der Shell ausgeführt werden) und den Wert der Umgebungsvariablen in einem Fenster ändern, wird diese Änderung nicht von einem anderen Fenster angezeigt.
Wenn ein untergeordneter Prozess erstellt wird, erbt es alle Umgebungsvariablen und deren Werte aus dem übergeordneten Prozess. Wenn ein Programm ein anderes Programm anruft, wird normalerweise zuerst ein Kinderprozess von erstellt Gabelund dann passt das Kind die Umgebung nach Bedarf an und letztendlich das Kind ersetzt selbst mit dem Programm zu rufen. Kinderprozesse können daher keine Umgebungsvariablen verwenden, um mit Gleichaltrigen zu kommunizieren, wodurch die Aktion in einem Entfernungsproblem vermieden wird.
Globales und globales Stellvertreter
Eine Anzahl von Nichtsstrukturiert Sprachen wie (frühe Versionen von) BASIC, Cobol und Forran I (1956) liefern nur globale Variablen. Fortran II (1958) führte Subroutinen mit lokalen Variablen und dem gemeinsamen Schlüsselwort für den Zugriff auf globale Variablen ein. Die Verwendung von Common in Forran wurde in Forran 77 fortgesetzt,[1] und spätere Sprachen wie PL/SQL beeinflusst. Namens Common -Gruppen für Globale benennen sich ähnlich wie strukturierte Namespaces.[2] Variablen sind auch standardmäßig global in Weiter, Lua, Perlund die meisten Muscheln.
Nach Sprache
C und C ++
Die C -Sprache hat keine a global
Stichwort. Variablen, die außerhalb einer Funktion deklariert wurden, haben jedoch "Dateiumfang", was bedeutet, dass sie in der Datei sichtbar sind. Mit Dateiumfang deklarierter Variablen sind zwischen ihrer Deklaration und dem Ende der Kompilierungseinheit sichtbar (.c
Datei) (sofern nicht von einem ähnlichen Objekt in einem näheren Bereich beschattet, wie z. B. eine lokale Variable); und sie haben implizit eine externe Verknüpfung und sind daher nicht nur für das sichtbar .c
Datei oder Kompilierungseinheit enthält ihre Erklärungen, aber auch an jede andere Kompilierungseinheit, die mit der Bildung des vollständigen Programms verbunden ist. Die externe Verknüpfung ist jedoch nicht ausreichend für die Verwendung einer solchen Variablen in anderen Dateien: Damit eine Kompilierungseinheit auf eine solche globale Variable korrekt zugreift, muss sie ihren Typ kennen. Dies wird erreicht, indem die Variable in jeder Datei mit der Datei deklariert wird extern
Stichwort. (Es wird sein erklärt in jeder Datei, kann aber sein definiert in nur einem.) So extern
Deklarationen werden häufig in einer freigegebenen Header -Datei platziert, da es für alle .c -Dateien in einem Projekt üblich ist, mindestens eines einzuschließen .h
Datei: Die Standard -Header -Datei Errno.h
ist ein Beispiel, das das macht Errno
Variablen zugänglich für alle Module in einem Projekt. Wenn dieser globale Zugangsmechanismus als problematisch beurteilt wird, kann er mit dem deaktiviert werden statisch
Stichwort Dies beschränkt eine Variable, um den Umfang zu leisten, und führt dazu, dass Versuche mit dem Importieren extern
Erhöhen Sie einen Kompilierungsfehler (oder Verknüpfung).[3]
Ein Beispiel für eine "globale" Variable in C:
#enthalten // Dies ist die Datei-Scope-Variable (mit interner Verknüpfung), nur in sichtbar in // diese Zusammenstellungseinheit. statisch int geteilt = 3; // Dieser hat eine externe Verknüpfung (nicht auf diese Kompilierungseinheit beschränkt). extern int übersät; // auch interne Verknüpfung. int Over_shared_too = 2; statisch Leere Veränderlich() { // Verweise auf die Datei-Skop-Variable in einer Funktion. geteilt = 5; } statisch Leere Localshadow() { // Lokale Variable, die den globalen gleichnamigen gleichnamigen verbergen. int geteilt; // Dies wirkt sich nur auf die lokale Variable aus und hat keinen Einfluss auf die // gleichnamige Datei-Scope-Variable. geteilt = 1000; } statisch Leere Paramshadow(int geteilt) { // Dies wirkt sich nur auf den Parameter aus und hat keinen Einfluss auf die Datei- // Umfangsvariable gleicher Name. geteilt = -geteilt; } int hauptsächlich() { // Verweise auf die Variable der Datei-Skope. printf("%d\n", geteilt); Veränderlich(); printf("%d\n", geteilt); Localshadow(); printf("%d\n", geteilt); Paramshadow(1); printf("%d\n", geteilt); Rückkehr 0; }
Da die Variable extern ist, müssen sie nicht als Parameter übergeben, um sie in einer Funktion neben dem Haupt zu verwenden. Es gehört zu jeder Funktion im Modul.
Die Ausgabe wird sein:
3 5 5 5
Java
Einige Sprachen, wie Java, haben keine globalen Variablen. In Java sind alle Variablen, die keine lokalen Variablen sind, Felder einer Klasse. Daher befinden sich alle Variablen im Rahmen einer Klasse oder einer Methode. In Java, statische Felder (auch bekannt als Klassenvariablen) existieren unabhängig von allen Fällen der Klasse und eine Kopie wird unter allen Fällen geteilt; Daher werden öffentliche statische Felder für viele der gleichen Zwecke wie globale Variablen in anderen Sprachen verwendet, da ihr ähnliches "Sharing" -Verhalten ist:
Öffentlichkeit Klasse Global { Öffentlichkeit statisch int a; }
Php
Php hat ein global
Schlüsselwort und eine Reihe ungewöhnlicher Wege zur Verwendung globaler Variablen. Außerhalb der Funktionen deklarierte Variablen haben einen Dateiumfang (der für die meisten Zwecke der größte Umfang ist). Sie sind jedoch innerhalb von Funktionen nicht zugänglich, es sei denn global
Schlüsselwort (d. H. Das Schlüsselwort Zugriffe Globale Variablen, nicht erklären Sie).
Einige vordefinierte Variablen, bekannt als jedoch als Superglobale sind immer zugänglich. Sie sind alle Arrays. Ein allgemeiner Zweck ist der $ Global
Superglobal, das alle aus Funktionsbereiche definierten Variablen enthält. Änderungen an seinen Elementen ändern die ursprünglichen Variablen und Ergänzungen erzeugen neue Variablen. Die Superglobale $ _Post
und $ _Get
werden in der Webprogrammierung weit verbreitet.
Andere Sprachen
- Im Python und Matlab Eine globale Variable kann überall mit dem deklariert werden
global
Stichwort.[4][5] - Rubin"Globale Variablen zeichnen sich durch a" aus "
$
' Sigil. Zum Beispiel gibt es eine Reihe vordefinierter Global$$
ist der Strom Prozess ID.
Siehe auch
Verweise
- ^ "Forran 77 Tutorial".
- ^ "Erste Schritte: Stack & Heap -Objekte".
- ^ C In der Nutschell, P.Prinz & T Crawford, 2006, O'Reilly, CH 11
- ^ "Was sind die Regeln für lokale und globale Variablen in Python?". docs.python.org. Python Software Foundation. Abgerufen 4. Juni 2020.
- ^ "Variablen als global deklarieren". in.mathworks.com. The MathWorks, Inc.. Abgerufen 7. Februar 2015.