STATIC Variable: Unterschied zwischen den Versionen
Georg (Diskussion | Beiträge) |
|||
Zeile 16: | Zeile 16: | ||
=== Programm-Datei-weit sichtbare STATIC Variable === | === Programm-Datei-weit sichtbare STATIC Variable === | ||
Wird eine STATIC Variable vor allen in einer Programm-Datei (.prg-Datei) definierten Funktionen, Prozeduren oder Klassen definiert, so kann diese Variable in der gesamten Programm-Quelle angesprochen werden: | Wird eine STATIC Variable vor allen in einer Programm-Datei (.prg-Datei) definierten [[Funktionen]], [[Prozeduren]] oder [[Klassen]] definiert, so kann diese Variable in der gesamten Programm-Quelle angesprochen werden: | ||
#INCLULDE "AppEvent.ch" | #INCLULDE "AppEvent.ch" | ||
Zeile 27: | Zeile 27: | ||
STATIC cDatum | STATIC cDatum | ||
nFritz kann in dieser Programm-Datei angesprochen werden, egal, in welcher Funktion, Methode, Klasse | nFritz kann in dieser Programm-Datei angesprochen werden, egal, in welcher [[Funktion]], [[Methode]], [[Klasse]]. | ||
Die [[Deklaration]] von cDatum hingegen ist nicht zulässig, da sie sich ausserhalb einer [[Funktion]] befindet, aber nicht VOR allen definitierten [[Funktionen]]. | |||
=== STATIC Variablen innerhalb einer Funktion === | === STATIC Variablen innerhalb einer Funktion === |
Aktuelle Version vom 17. Juni 2013, 16:34 Uhr
Definition einer STATIC Variablen
STATIC Variable gehören zu den lexikalischen Variablen, die durch den Compiler aufgrund einer expliziten Definition (STATIC Statement)deklariert werden.
FUNCTION TueIrgendEtwas(cParam1, nParam2) STATIC nI, nLen
nI und nLen sind explizit über die Anweisung STATIC deklarierte Variablen.
Zur Reihenfolge der Deklaration siehe ausführbare und nicht ausführbare Deklarationen.
Besonderheiten der STATIC Variablen
Programm-Datei-weit sichtbare STATIC Variable
Wird eine STATIC Variable vor allen in einer Programm-Datei (.prg-Datei) definierten Funktionen, Prozeduren oder Klassen definiert, so kann diese Variable in der gesamten Programm-Quelle angesprochen werden:
#INCLULDE "AppEvent.ch" #DEFINE CRLF Chr(13)+Chr(10) #PRAGMA Library("OT4XB.LIB") STATIC nFritz FUNCTION Test1() ... RETURN(.T.) STATIC cDatum
nFritz kann in dieser Programm-Datei angesprochen werden, egal, in welcher Funktion, Methode, Klasse.
Die Deklaration von cDatum hingegen ist nicht zulässig, da sie sich ausserhalb einer Funktion befindet, aber nicht VOR allen definitierten Funktionen.
STATIC Variablen innerhalb einer Funktion
In einer Funktion deklarierte STATIC Variablen sind nur in dieser Funktion sichtbar und behalten ihren Wert auch dann bei, wenn die Funktion endet. Beim nächsten Aufruf der Funktion wird die Variable wieder sichtbar und hat ihren vorherigen Wert behalten.
FUNCTION TueIrgendEtwas(cP1, nP2) STATIC lRunOnce := .T. IF lRunOnce ... (Initialisierungsanweisungen) lRunOnce := .F. ENDIF ... RETURN(.T.)
In diesem Fall wird lRunOnce mit .T. initialisiert. Aufgrund dessen wird beim ersten Aufruf die IF/ENDIF Anweisung verarbeitet, an deren Ende lRunOnce auf .F. gesetzt wird. Bei jedem folgenden Aufruf der Funktion wird die Initialisierung nicht mehr durchlaufen, da lRunOnce auf .F. steht.
Wäre lRunOnce eine LOCAL Variable, würde sie bei jedem Aufruf der Funktion neu mit .T. initialisiert.
Initialisierung einer STATIC Variablen
STATIC Variablen werden beim Programm-Start initialisiert. Das bedeutet, dass man ihnen einen Initialisierungswert zuweisen kann, dieser Wert kann jedoch nur ein Literal sein und nicht der Rückgabewert einer Funktion:
STATIC dHeute := Date() // unzulässig STATIC lRunOnce := .F. // zulässig
Sichtbarkeit von STATIC Variablen
Genaueres findet sich hier: Lebenszeit und Sichtbarkeit der Variablen-Klassen