Navigation

2.6.3 Speicherklasse static

Variablen der Speicherklasse static sind nur innerhalb eines Quellfiles sichtbar und behalten ihre Werte beim Verlassen einer Funktion. Ihre Lebensdauer erstreckt sich also auf die gesamte Zeit der Programmausführung. Sie bieten die Möglichkeit eines differenzierten Zugriffsschutzes.

VERBATIM/b263: 

static int x;  /* sichtbar nur in dieser Datei */
void f()
{ 
   x=5;        /* Zugriff auf x */
}

static int y;  /* sichtbar nur ab dieser Stelle */
void g()
{ 
   if ( x != 5 ) /* Zugriff auf x */
      y=5        /* Zugriff auf y */
   else
      y=1;
}

Im vorhergehenden Beispiel kann auf x sowohl in der Funktion f als auch in g zugegriffen werden, während y nur in der Funktion g bekannt ist.

Es besteht keine Möglichkeit des Zugriffs auf static-Variablen aus anderen Quelltextfiles, die zu diesem Programm gehören. Werden static-Variablen in einem Block definiert, so kann man außerhalb dieses Blocks nicht auf sie zugreifen.

Im nachfolgenden Beispiel wurden die Funktionen eines C-Programmes auf drei Quellfiles aufgeteilt:

BEISPIELE/b26a.c: 

/* Achtung: Programm auf drei Quellfiles (.c) verteilt */
/* so uebersetzen: cc b26a.c b26b.c b26c.c             */
#include <stdio.h>

int i=1;
main()
{   
    auto int i, j;

    i = reset();
    for( j=1; j<3; j++) {
        printf("i:%d j:%d\n",i,j);
        printf("%d\n",next());
        printf("%d\n",last());
        printf("%d\n\n",new(i+j));
    }
}

BEISPIELE/b26b.c: 

/* Achtung: Programm auf drei Quellfiles (.c) verteilt */
/* so uebersetzen: cc b26a.c b26b.c b26c.c             */

static int i=10;
next () 
{ 
   return( i+=1 ); 
}

last () 
{ 
   return( i-=1 ); 
}

new (i) 
{ 
   static int j=5; 

   return( i=j+=i ); 
}

BEISPIELE/b26c.c: 

/* Achtung: Programm auf drei Quellfiles (.c) verteilt */
/* so uebersetzen: cc b26a.c b26b.c b26c.c             */

extern int i;
reset() 
{ 
    return(i);  /* return einer globalen Variable
                   ist schlechter Programmierstil !!   */
}

Navigation