The scope of a variable in C is the block or the region in the program where a variable is declared, defined, and used. Outside this region, we cannot access the variable, and it is treated as an undeclared identifier.
- The scope of an identifier is the part of the program where the identifier may directly be accessible.
- All variables are lexically(or statically) scoped in C which means the scope is defined at the compiler time and not dependent on the caller of the function.
#include <stdio.h>
int main()
{
// Scope of this variable is
// within main() function only.
int var = 34;
printf("%d", var);
return 0;
}
// function where we try to access
// the var defined in main()
void func() { printf("%d", var); }
Output
solution.c: In function 'func':
solution.c:15:28: error: 'var' undeclared (first use in this function)
void func() { printf("%d", var); }Here, we tried to access variable names var As we can see that if we try to refer to the variable outside its scope, we get the above error.
Global Scope in C
The global scope refers to the region outside any block or function.
- The variables declared in the global scope are called global variables.
- Global variables are visible in every part of the program.
- Global is also called File Scope as the scope of an identifier starts at the beginning of the file and ends at the end of the file.
#include <stdio.h>
// variable declared in global scope
int global = 5;
// global variable accessed from
// within a function
void display(){
printf("%d\n", global);
}
int main(){
printf("Before change within main: ");
display();
// changing value of global
// variable from main function
printf("After change within main: ");
global = 10;
display();
}
Output
Before change within main: 5 After change within main: 10
Linkage of Variables in Global Scope
Global variables have external linkage by default. It means that the variables declared in the global scope can be accessed in another C source file. We have to use the extern keyword for that purpose.
Example of External Linkage
file1.c
// filename: file1.c
#include <stdio.h>
// Define the global variable
int a;
// Define the function to
// use the global variable
void myfun(){
printf("%d\n", a);
}
main.c
// filename: main.c
#include <stdio.h>
// Declare the external variable and function
extern int a;
void myfun();
int main(void)
{
// Initialize the global variable
a = 2;
// Call the function to print the value of 'a'
myfun();
return 0;
}
Output
2Note: To restrict access to the current file only, global variables can be marked as static.
Local Scope in C
The local scope refers to the region inside a block or a function. It is the space enclosed between the { } braces.
- The variables declared within the local scope are called local variables.
- Local variables are visible in the block they are declared in and other blocks nested inside that block.
- Local variables have no linkage.
#include <stdio.h>
int main()
{
{
int x = 10, y = 20;
{
// The outer block contains
// declaration of x and
// y, so following statement
// is valid and prints
// 10 and 20
printf("x = %d, y = %d\n", x, y);
{
// y is declared again,
// so outer block y is
// not accessible in this block
int y = 40;
// Changes the outer block
// variable x to 11
x++;
// Changes this block's
// variable y to 41
y++;
printf("x = %d, y = %d\n", x, y);
}
// This statement accesses
// only outer block's
// variables
printf("x = %d, y = %d\n", x, y);
}
}
return 0;
}
Output
x = 10, y = 20 x = 11, y = 41 x = 11, y = 20