0% found this document useful (0 votes)
2 views

Storage Classes in C notes

The document explains storage classes in C, which define the visibility, location, and lifetime of variables. It covers four types: auto (local variables), extern (global variables), static (variables that retain values between function calls), and register (variables stored in CPU registers for faster access). Each storage class has specific characteristics regarding scope and initialization, with examples provided for clarity.

Uploaded by

profile.ankitdas
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

Storage Classes in C notes

The document explains storage classes in C, which define the visibility, location, and lifetime of variables. It covers four types: auto (local variables), extern (global variables), static (variables that retain values between function calls), and register (variables stored in CPU registers for faster access). Each storage class has specific characteristics regarding scope and initialization, with examples provided for clarity.

Uploaded by

profile.ankitdas
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 6

Storage Classes in C: Auto, Extern, Static,

Register (Examples)

What is Storage Class in C?


A storage class represents the visibility and a location of a variable. It
tells from what part of code we can access a variable. A storage class in
C is used to describe the following things:

• The variable scope.


• The location where the variable will be stored.
• The initialized value of a variable.
• A lifetime of a variable.
• Who can access a variable?

Thus, a storage class is used to represent the information about a


variable.

NOTE: A variable is not only associated with a data type, its value but
also a storage class.

What are the Types of Storage Classes in C?


There are total four types of standard storage classes. The table below
represents the storage classes in C.

Storage class Purpose

auto It is a default storage class.

extern It is a global variable.

It is a local variable which is capable of returning


static a value even when control is transferred to the
function call.

register It is a variable which is stored inside a Register.


Auto Storage Class in C
The variables defined using auto storage class are called as local
variables. Auto stands for automatic storage class. A variable is in auto
storage class by default if it is not explicitly specified.

The scope of an auto variable is limited with the particular block only.
Once the control goes out of the block, the access is destroyed. This
means only the block in which the auto variable is declared can access
it.

A keyword auto is used to define an auto storage class. By default, an


auto variable contains a garbage value.

Example, auto int age;


The program below defines a function with has two local variables

int add(void) {
int a=13;
auto int b=48;
return a+b;}

We take another program which shows the scope level “visibility level”
for auto variables in each block code which are independently to each
other:

#include <stdio.h>
int main( )
{
auto int j = 1;
{
auto int j= 2;
{
auto int j = 3;
printf ( " %d ", j);
}
printf ( "\t %d ",j);
}
printf( "%d\n", j);}
OUTPUT:

3 2 1

Extern Storage Class in C


Extern stands for external storage class. Extern storage class is used
when we have global functions or variables which are shared between
two or more files.

Keyword extern is used to declaring a global variable or function in


another file to provide the reference of variable or function which have
been already defined in the original file.

The variables defined using an extern keyword are called as global


variables. These variables are accessible throughout the program.
Notice that the extern variable cannot be initialized it has already been
defined in the original file.

Example, extern void display();

First File: main.c


#include <stdio.h>
extern i;
main() {
printf("value of the external integer is =
%d\n", i);
return 0;}

Second File: original.c


#include <stdio.h>
i=48;
Result:

value of the external integer is = 48


Static Storage Class in C
The static variables are used within function/ file as local static
variables. They can also be used as a global variable.

• Static local variable is a local variable that retains and stores its
value between function calls or block and remains visible only to
the function or block in which it is defined.
• Static global variables are global variables visible only to the file
in which it is declared.

Example: static int count = 10;

Keep in mind that static variable has a default initial value zero and is
initialized only once in its lifetime.

#include <stdio.h> /* function declaration */


void next(void);
static int counter = 7; /* global variable */
main() {
while(counter<10) {
next();
counter++; }
return 0;}
void next( void ) { /* function definition */
static int iteration = 13; /* local static
variable */
iteration ++;
printf("iteration=%d and counter= %d\n",
iteration, counter);}
Result:

iteration=14 and counter= 7


iteration=15 and counter= 8
iteration=16 and counter= 9

Global variables are accessible throughout the file whereas static


variables are accessible only to the part of a code.
The lifespan of a static variable is in the entire program code. A variable
which is declared or initialized using static keyword always contains
zero as a default value.

Register Storage Class in C


You can use the register storage class when you want to store local
variables within functions or blocks in CPU registers instead of RAM to
have quick access to these variables. For example, “counters” are a
good candidate to be stored in the register.

Example: register int age;

The keyword register is used to declare a register storage class. The


variables declared using register storage class has lifespan throughout
the program.

It is similar to the auto storage class. The variable is limited to the


particular block. The only difference is that the variables declared using
register storage class are stored inside CPU registers instead of a
memory. Register has faster access than that of the main memory.

The variables declared using register storage class has no default value.
These variables are often declared at the beginning of a program.

#include <stdio.h> /* function declaration */


int main () {
{register int weight;
int *ptr=&weight ;/*it produces an error when the
compilation occurs, we cannot get a memory
location when dealing with CPU register*/}
}

OUTPUT:

error: address of register variable 'weight'


requested
The table summarizes the principal features of each storage class which
are commonly used in C programming

Storage Default
Declaration Storage Scope Lifetime
Class Initial Value
Inside a Within the Within the
auto Memory Unpredictable
function/block function/block function/block
Inside a CPU Within the Within the
register Garbage
function/block Registers function/block function/block
Entire the file
and other files
Outside all where the program
extern Memory Zero
functions variable is runtime
declared as
extern
Static Inside a Within the program
Memory Zero
(local) function/block function/block runtime
Static Outside all program
Memory Zero Global
(global) functions runtime

You might also like