STATIC Variable: Unterschied zwischen den Versionen

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen
 
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.


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