The following program shows the linkage of static identifiers at file scope. This program uses two different external static identifiers named stat_var. The first definition occurs in File 1. The second definition occurs in File 2. The main function references the object defined in File 1.. The var_print function references the object defined in File 2.
File 1
/************************************************************** ** Program to illustrate file scope static variables ** **************************************************************/ #include <stdio.h> extern void var_print(void); static stat_var = 1; int main(void) { printf("file1 stat_var = %d\n", stat_var); var_print(); printf("FILE1 stat_var = %d\n", stat_var); return(0); }
File 2
/************************************************************** ** This file contains the second definition of stat_var ** **************************************************************/ #include <stdio.h> static int stat_var = 2; void var_print(void) { printf("file2 stat_var = %d\n", stat_var); }
This program produces the following output:
file1 stat_var = 1 file2 stat_var = 2 FILE1 stat_var = 1
The following program shows the linkage of static identifiers with block scope. The test function defines the static variable stat_var, which retains its storage throughout the program, even though test is the only function that can refer to stat_var.
/************************************************************** ** Program to illustrate block scope static variables ** **************************************************************/ #include <stdio.h> int main(void) { void test(void); int counter; for (counter = 1; counter <= 4; ++counter) test(); return(0); } void test(void) { static int stat_var = 0; auto int auto_var = 0; stat_var++; auto_var++; printf("stat_var = %d auto_var = %d\n", stat_var, auto_var); }
This program produces the following output:
stat_var = 1 auto_var = 1 stat_var = 2 auto_var = 1 stat_var = 3 auto_var = 1 stat_var = 4 auto_var = 1