STATIC Variable

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen

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