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.
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; }
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 !! */ }