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