Write a note on storage classes with examples.
The
“storage class” of a variable determines whether the item has a “global” or
“local” lifetime. C calls these two lifetimes “static” and “automatic.” An item
with a global lifetime exists and has a value throughout the execution of the
program. All functions have global lifetimes.
Automatic
variables, or variables with local lifetimes, are allocated new storage each
time execution control passes to the block in which they are defined. When
execution returns, the variables no longer have meaningful values.
C
provides the following storage-class specifiers:
Syntax
storage-class-specifier :
auto
register
static
extern
typedef
register
static
extern
typedef
auto is the default storage class for
local variables.
{
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.
ii) register - Storage Class
register
is used to define local variables that should be stored in a register instead
of RAM. This means that the variable has a maximum size equal to the register
size (usually one word) and cant have the unary '&' operator applied to it
(as it does not have a memory location).
{
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 implementation restrictions.
iii) static - Storage Class
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;
extern
defines a global variable that is visible to ALL object modules. When you use
'extern' the variable cannot be initialized 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();
} }
The
placement of variable and function declarations within source files also
affects storage class and visibility. Declarations outside all function
definitions are said to appear at the “external level.” Declarations within
function definitions appear at the “internal level.”
The
exact meaning of each storage-class specifier depends on two factors:
·
Whether
the declaration appears at the external or internal level
·
Whether
the item being declared is a variable or a function