Scope tells us where a variable can be used in a program. It helps keep things organized and avoids confusion.
Scope of variables
/* Global variable outside functions */ int y = 10; // y is global /* Local variable inside a function */ int main() { int x = 5; // x is local to main } void func() { // can use y here }
Local variables exist only inside the block or function where they are declared.
Global variables exist throughout the whole program and can be used anywhere after they are declared.
b is only available inside the inner block.int main() { int a = 3; // a is local to main { int b = 4; // b is local to this block } // b cannot be used here }
increment can use the global variable count.int count = 0; // global variable void increment() { count = count + 1; // can access global count }
x is local to func and not visible in main.void func() { int x = 10; // local to func } int main() { // x cannot be used here }
This program shows how local_var is only available inside show(), but global_var can be used anywhere.
#include <stdio.h> int global_var = 100; // global variable void show() { int local_var = 50; // local variable printf("Inside show(): local_var = %d\n", local_var); printf("Inside show(): global_var = %d\n", global_var); } int main() { show(); // printf("In main(): local_var = %d\n", local_var); // This would cause error printf("In main(): global_var = %d\n", global_var); return 0; }
Trying to use a local variable outside its scope will cause a compile error.
Global variables can make programs harder to understand if overused, so use them carefully.
Blocks inside functions (like inside braces {}) can have their own local variables too.
Scope defines where a variable can be accessed in a program.
Local variables live inside functions or blocks and cannot be used outside.
Global variables live throughout the program and can be used anywhere after declaration.
Practice
Solution
Step 1: Understand variable declaration inside a function
A variable declared inside a function is created when the function starts and destroyed when it ends.Step 2: Identify the scope of such variables
These variables are local to the function and cannot be accessed outside it.Final Answer:
It is local to that function and cannot be accessed outside. -> Option CQuick Check:
Local variable scope = inside function only [OK]
- Thinking local variables are global
- Assuming local variables exist outside function
- Confusing local with static variables
Solution
Step 1: Identify global variable declaration
Global variables are declared outside all functions, usually at the top of the file.Step 2: Check each option
int x; // declared outside any function declaresint x;outside any function, which is correct for global scope.Final Answer:
int x; // declared outside any function -> Option AQuick Check:
Global variables declared outside functions [OK]
- Declaring globals inside functions
- Using static inside functions for globals
- Declaring variables inside loops thinking they are global
int x = 5;
void func() {
int x = 10;
printf("%d", x);
}
int main() {
func();
printf(" %d", x);
return 0;
}Solution
Step 1: Analyze variable scopes in func()
Inside func(), a local variablexis declared with value 10, which hides the globalx.Step 2: Check printf outputs
First printf prints localx(10). Then main prints globalx(5).Final Answer:
10 5 -> Option DQuick Check:
Local hides global inside function [OK]
- Assuming global x prints inside func()
- Mixing order of printed values
- Ignoring local variable shadowing
void func() {
printf("%d", x);
}
int main() {
int x = 5;
func();
return 0;
}Solution
Step 1: Check variable x usage in func()
func() tries to printxbutxis declared only inside main(), so func() cannot see it.Step 2: Understand variable scope rules
Variables declared inside main() are local to main() only, not visible in other functions.Final Answer:
x is not declared globally, so func() cannot access it -> Option AQuick Check:
Local variables not visible outside their function [OK]
- Thinking main()'s x is global
- Ignoring variable scope rules
- Assuming implicit global variables
int x = 1;
void outer() {
int x = 2;
{
int x = 3;
printf("%d ", x);
}
printf("%d ", x);
}
int main() {
outer();
printf("%d", x);
return 0;
}What is the output when this program runs?
Solution
Step 1: Analyze innermost block variable
The innermost block declaresx = 3, so first printf prints 3.Step 2: Analyze outer block variable
After inner block ends, thex = 3goes out of scope, so next printf prints outerx = 2.Step 3: Analyze global variable in main()
Finally, main prints globalx = 1.Final Answer:
3 2 1 -> Option BQuick Check:
Inner blocks hide outer variables [OK]
- Ignoring block-level scope
- Assuming all x print same value
- Confusing order of prints
Ready to prove it?
Pass the test and this pattern moves unknown
