C has a concept of 'Storage classes' which are used to define the scope (visability) and life time of variables and/or functions.
So what Storage Classes are available?
| auto | register | static | extern | typedef | 
	{
	    int Count;
	    auto int Month;
	}
The example above defines two variables with the same storage class.
auto can only be used within functions, i.e. local variables. 
	{
	  register int  Miles;
	}
Register should only be used for variables that require quick access - such
as counters. It should also be noted that defining 'register' goes not mean
that the variable will be stored in a register. It means that it MIGHT be stored
in a register - depending on hardware and implimentation restrictions.
static is the default storage class for global variables. The two variables below (count and road) both have a static storage class.
| 
     static int Count;
     int Road;
     main()
     {
       printf("%d\n", Count);
       printf("%d\n", Road);
     }
 | 
'static' can also be defined within a function. If this is done, the variable is initalised at compilation time and retains its value between calls. Because it is initialsed at compilation time, the initalistation value must be a constant. This is serious stuff - tread with care.
| 
     void Func(void)
     {
       static Count=1;
     }
 | 
Here is an example
There is one very important use for 'static'. Consider this bit of code.
 
 
'Func' returns a pointer to the memory location where 'Text2' starts
BUT Text2 has a storage class of auto and will disappear
when we exit the function and could be overwritten by something else. The
answer is to specify:
 
 
The storage assigned to 'Text2' will remain reserved for the duration if the 
program.
 
The compile command will look something like. 
 
 
     char *Func(void);
     main()
     {
       char *Text1;
       Text1 = Func();
     }
     char *Func(void)
     {
       char Text2[10]="martin";
       return(Text2);
     }
 
 
     static char Text[10]="martin";
extern - storage Class
extern defines a global variable that is visable to ALL object 
modules. When you use 'extern' the variable cannot be initalized as 
all it does is point the variable name at a storage location that has 
been previously defined.
 	Source 1				Source 2
        --------				--------
	extern int count;			int count=5;
        write()					main()
        {					{
          printf("count is %d\n", count);	  write();
        }					}
Count in 'source 1' will have a value of 5. If source 1 changes the 
value of count - source 2 will see the new value. Here are some example 
source files.
	gcc source1.c source2.c -o program
See Also:
 Data types.
Data types.
| Top | Master Index | Keywords | Functions |