Scope of Variables in C – Local,Global & Formal parameters

Scope of Variables in C define the visibility of a variable within the block or within function or a program. Unlike other programming languages C allows us to declare variables anywhere in the program but should be in their scope or visibility and should be declared before its use.

In simple, a scope of a variable can be understood as a region in a program where a declared variable can be accessed, modified and used for the purpose, beyond that region variable cannot be accessed. There are three different ways to declare variables in C language.

Consider below example program to find the Multiplication of two numbers.

 /* Scope of Variables in C - Example 1  */ 
#include <stdio.h>
int v1 = 10;   //Global variable
int multiply(int,int);
int main(){
int v2,v3;
int mul; // v2, v3 n mul are local variable

v2 = 25;
mul = v1*v2;
printf("Multiplication of v1 n v2 is: %d\n", mul);
v1 = 5;
v3 = 12;
mul = multiply(v1,v3);
printf("Multiplication of v1 n v3 is: %d\n", mul);

return 0;

int multiply(int a,int b)   // Formal parameters
int result;
result = a * b;

return result;


Multiplication of v1 n v2 is: 250
Multiplication of v1 n v3 is: 60

As you can see in the above example there are two functions main() to start the program and multiply() to perform multiplication. Apart from function the variables v1 is declared which is outside any function, so it can be accessible, modified in both functions and also outside the functions, you can see v1 modified in main function. Variable v1’s visibility is throughout the program so it is called as Global variable.

Next is local variables v2, v3 which are mostly declared at the beginning of the main or any other function. These local variables v2, v3 can only be accessed throughout the main function and cannot be accessed by other function or block in the program. This is why variables v2, v3 are called local variable whose scope is limited to the function or block in which it is being declared.

Third one is formal parameters which are similar to local variables which are only available inside the function.

Let’s study C scope rules in details using example.

Scope of Variables in C

Local Variables

Variables declared inside a region/function/block are called local variables. These variables also called as auto variables that can be utilized only by statements and expression inside that function or block of statements.

Following example shows how local variables declared, defined and used.

 /* Scope of Variables in C - Example 2  */ 
#include <stdio.h>
int main () {

  int var1, var2, sum; // Local
  var1 = 15;
  var2 = 28;
  sum = var1 + var2;
  printf ("Sum of var1 + var2 = %d\n",sum);
  return 0;


Sum of var1 + var2 = 43

Local Variables has limited lifetime can be used only inside a block or a function where the variables are declared. Outside that block or function it is undeclared variable and will be destroyed upon exiting the block.

Let’s see an another example using block inside a block and using variable outside its availability.

 /* Scope of Variables in C - Example 3  */ 

int main()

int var1;

var1 = 10;
printf("Outer Local variable var1 : %d\n", var1);

 { //Block B
 int var1;   // this var1 has higher preference than outer var1
 var1 = 50
 printf("Inner local variable var1 : %d\n", var1);

printf("Outer var1 : %d\n", var1);  // this still the same

return 0;



Outer Local variable var1 : 10
Inner local variable var1 : 50
Outer var1 : 10

In the above example, value of variable var1 is 10 outside the block B and inside block B we have declared var1 again and assigned a value 50 to it, so the value of var1 is now 50. When we exit this block, var1 which holds 50 get destroyed and now the value of var1 become 10 which was outside the block.

Global Variables

Variables declared outside the function and accessed by any function are called Global variables. The availability of Global variables throughout and holds the value till lifetime of the program and available for use over entire program after its declaration. Global variables are accessible from outside ad inside the functions or blocks. In simple, we can access global variable from anywhere in the program.

The following example program show how global variables are used in a program.

 /* Scope of Variables in C - Example 3  */ 
#include <stdio.h>

int GVar1;
int GVar2 = 10; // global variable
int multiply();

int main () {
int sum, mul;  // local variable
printf("Value of GVar1 = %d and Gvar2 = %d \n", GVar1,GVar2);

GVar1 = 20;
sum = GVar1 + GVar2;
printf("Sum of GVar1 + GVar2 = %d + %d = %d\n\n", GVar1, GVar2, sum);

mul = multiply();
printf("*********Global Variable after modification*********\n\n");

printf("Values of GVar1 = %d and GVar2 = %d\n", GVar1, GVar2);

printf("Multiplication of GVar1 & GVar2 = %d X %d = %d\n", GVar1, GVar2, mul);
  return 0;

int multiply(){
GVar1 = 5;
GVar2 = 6;
return GVar1*GVar2;


Value of GVar1 = 0 and Gvar2 = 10
Sum of GVar1 + GVar2 = 20 + 10 = 30

*********Global Variable after modification*********

Values of GVar1 = 5 and GVar2 = 6
Multiplication of GVar1 & GVar2 = 5 X 6 = 30

As you can see in above example there are 2 global variables GVar1, GVar2, a local variable sum, mul and a function to multiply modified variables. The variable GVar2 assigned a value ‘10’ while Gvar1 got default value which is ‘0’ assigned by compiler. As we already know that global variable can be modified at any place inside or outside function in a program, so Gvar1 is reassigned value 20 inside main function which replace default value. And the sum of this two is 30, can be seen at output.

In the second part, we have modified variables GVar1 and GVar2 in function multiply (). Now variables hold the value 5 and 6 instead 10 & 20 which were assigned before main function.

Important: A program can have variable named similar for local and global variables but the value of local variable inside a function will have higher priority over global.

 /* Scope of Variables in C - Example 4  */ 

int GV = 50;

void printGV();
int main () {

  int GV = 13;
  printf ("Value of GV = %d\n",GV);
  return 0;

void printGV(){

printf("printing GV = %d\n",GV);


value of GV = 13
printing GV = 50

So, the value inside the local block or functions will be holds that value until that block or functions closed. Local variables will be created that hides the global variable when execution enter the block and destroyed at exit from the block or functions. So, the function printGV() function got value of global variable.

Formal Parameters

Formal parameters are similar to local variables with-in a function and they take higher precedence over global variables.

 /* Scope of Variables in C - Example 5  */ 
#include <stdio.h>

/* global variable declaration */
int var1 = 50;

int sum(int,int);
int multi(int,int);

int main () {

  /* local variable declaration in main function */
  int var1 = 10;
  int var2 = 20;
  int Add = 0;
  int mul = 0;

  printf ("value of var1 inside main function = %d\n",var1);

  Add = sum(var1,var2);

  printf ("Sum = %d\n",Add);

  mul = multi(var1,var2);

  printf ("Multiply = %d\n",mul);
  return 0;

int sum(int var1, int var2) { // this are local variables

printf ("values in sum function are var1= %d, var2 = %d\n",var1,var2);

   return var1 + var2;

int multi(int a,int b){

printf ("values of var1 inside multi function are var1= %d\n",var1);

return a*b;


value of var1 inside main function = 10
values in sum function are var1= 10, var2 = 20
Sum = 30
values of var1 inside multi function are var1= 50
Multiply = 200 

Here, variable var1 and var2 are passed as formal parameters to the function sum() from main() which holds values 10 and 20. When this parameters are received with same name as that of global variable they have higher priority over global.

Now look at second function multi() whose receiving parameters are different from global variable so here var1 hold global value.

Default values of Local and Global Variables

When a local variable is defined, we must initialize it else they hold garbage value. Global variables are initialized automatically by the system. And it is always recommended to initialize variable to avoid unexpected results.

Data TypeDefault Values

Don’t forget to Share and Subscribe!


Leave a Reply

Your email address will not be published. Required fields are marked *