Lifetime and scope tell us where and how long a variable can be used in a program. This helps us keep our code organized and avoid mistakes.
Lifetime and scope comparison
/* Scope examples */ int global_var; // global scope void function() { int local_var; // local scope } /* Lifetime examples */ static int static_var; // lifetime lasts entire program int normal_var; // lifetime lasts entire program
Scope means where in the code a variable can be accessed.
Lifetime means how long the variable exists in memory.
int global_var; // global scope, lifetime is whole program void func() { int local_var; // local scope, lifetime is during func call }
void func() { static int count = 0; // static variable count++; printf("Count: %d\n", count); }
This program shows how global_var is accessible everywhere, local_var only inside demo(), and static_var keeps its value between calls.
#include <stdio.h> int global_var = 10; // global scope and lifetime void demo() { int local_var = 5; // local scope and lifetime static int static_var = 0; // local scope, lifetime whole program static_var++; printf("Inside demo - global_var: %d, local_var: %d, static_var: %d\n", global_var, local_var, static_var); } int main() { demo(); demo(); // printf("local_var: %d\n", local_var); // Error: local_var not visible here printf("global_var in main: %d\n", global_var); return 0; }
Global variables have global scope and lifetime for the whole program.
Local variables have scope only inside their block and lifetime only during that block execution.
Static local variables have local scope but lifetime for the whole program.
Scope controls where a variable can be used in the code.
Lifetime controls how long a variable exists in memory.
Static variables combine local scope with long lifetime.
Practice
scope of a variable in C?Solution
Step 1: Understand the meaning of scope
Scope means where in the code a variable can be used or accessed.Step 2: Differentiate scope from lifetime
Lifetime is about how long the variable exists in memory, not where it can be used.Final Answer:
The part of the program where the variable can be accessed -> Option CQuick Check:
Scope = where variable is accessible [OK]
- Confusing scope with lifetime
- Thinking scope is about memory size
- Mixing scope with data type
Solution
Step 1: Recall correct syntax for static local variable
The keywordstaticcomes before the type:static int count = 0;.Step 2: Identify invalid syntax options
int static count = 0;has incorrect order.auto static int count = 0;andregister static int count = 0;use invalid combinations of storage class specifiers.Final Answer:
static int count = 0; -> Option AQuick Check:
Static local variable syntax = static before type [OK]
- Placing 'static' after type
- Combining 'auto' and 'static' incorrectly
- Using 'register' with 'static'
void func() {
static int x = 0;
x++;
printf("%d ", x);
}
int main() {
for(int i = 0; i < 3; i++) {
func();
}
return 0;
}Solution
Step 1: Understand static variable behavior inside function
Static variablexkeeps its value between function calls and starts at 0.Step 2: Trace the loop and function calls
Each call incrementsxby 1 and prints it: first 1, then 2, then 3.Final Answer:
1 2 3 -> Option AQuick Check:
Static variable increments across calls = 1 2 3 [OK]
- Assuming static resets each call
- Confusing initial value of static variable
- Ignoring the loop effect
int main() {
if (1) {
int a = 5;
}
printf("%d", a);
return 0;
}Solution
Step 1: Check where 'a' is declared and used
'a' is declared inside the if-block and cannot be accessed outside it.Step 2: Understand scope rules
Variables declared inside braces have local scope limited to those braces, so 'a' is out of scope in printf.Final Answer:
Variable 'a' is used outside its scope -> Option DQuick Check:
Using variable outside its block scope causes error [OK]
- Trying to use variable outside its block
- Thinking static fixes scope errors
- Ignoring variable lifetime vs scope
void counter() {
static int count = 0;
int temp = 0;
count++;
temp++;
printf("%d %d\n", count, temp);
}
int main() {
for (int i = 0; i < 3; i++) {
counter();
}
return 0;
}
What will be the output and why?Solution
Step 1: Analyze 'count' variable behavior
'count' is static, so it keeps incrementing across calls: 1, 2, 3.Step 2: Analyze 'temp' variable behavior
'temp' is local and reinitialized to 0 each call, so it increments to 1 every time.Step 3: Understand output pattern
Output lines are: "1 1", "2 1", "3 1" matching the behavior above.Final Answer:
1 1 2 1 3 1 Because 'count' is static and 'temp' is local each call -> Option BQuick Check:
Static keeps value; local resets each call [OK]
- Assuming local variable keeps value between calls
- Confusing initialization of static vs local
- Ignoring that temp resets every call
Ready to prove it?
Pass the test and this pattern moves unknown
