- Data type of the variable
- Storage of the variable
Till now we are just declaring the data type of the variable.
Does it mean there is no storage class of variables which we have declared till now?
Well the answer is definitely No, because we cannot declare a variable without its storage class. By default certain storage classes automatically added, if we don’t declare storage classes explicitly.
What are storage classes In C?
As I told you earlier, during the declaration of variables some space is reserved for that variable. Storage class is the property which decides that reserved space. There are two places where space is reserved for variables. One is memory and the other is register.
Storage class of the variable defines
- Place where the variable should store
- Default or initial value of the variable
- Scope of the variable
- Life of the variable
There are four storage classes in C language and I will define all of them based on the above factors.
Automatic Storage Class
Storage: Memory
Initial Value: Any garbage value
Scope: Local to the block in which the variable is defined
Life: Till the control remains in the block in which it is defined
Syntax: auto int x;
int main() { auto int x; //automatic variable int y; //this is also automatic variable return 0; }
If we do not specify the storage class of a variable then by default it is in automatic storage class. You can see this in above example.
Register Storage Class
Storage: CPU registers.
Initial value: Any garbage value
Scope: Local to the block in which the variable is defined
Life: Till the control remains in the block in which it is defined
Syntax: register int x;
A variable defined as register is stored in CPU registers. We define a variable as register when we need to access it frequently in our program. Since registers are limited so when no register is available then the variable is stored in memory.
Static Storage Class
Storage: Memory
Initial value: 0 (zero)
Scope: Local to the block in which the variable is defined
Life: Variable exists during the various function calls
Syntax: static int x;
#include<stdio.h> void fun() { static int x; // x is static variable printf("%d ",x); x=x+2; } int main() { fun(); fun(); fun(); return 0; }
Output
0 2 4
In the above program I have declared x variable as static, its initial value is 0. I have called the fun() function there times. I am increasing the value of x by 2. You can see in the output that the value of x variable is not lost. It remains in the memory during different function calls.
External Storage Class
Storage: Memory
Initial value: 0 (zero)
Scope: Global.
Life: During the whole program execution
Syntax: extern int x;
A variable with external storage class can be defined outside all functions. So that it will be available for every function throughout the program execution. It can also be defined inside certain function.
Storage Classes in C (click on image to enlarge) – Image Source |
Note: static, register, auto and extern are the keywords which are used to specify some storage class. These storage classes can also be used to define functions.