Storage classes tell the computer how long a variable should keep its value and where it should be stored. This helps organize memory and control variable access.
Why storage classes are needed
storage_class data_type variable_name;
Common storage classes in C are auto, register, static, and extern.
If you don't specify a storage class, auto is the default for local variables.
static int count = 0;
total is defined in another file.extern int total;register int speed;auto int temp;This program shows how a static variable keeps its value between function calls. Each time demo() runs, count increases and remembers its value.
#include <stdio.h> void demo() { static int count = 0; // keeps value between calls count++; printf("Count is %d\n", count); } int main() { demo(); demo(); demo(); return 0; }
Using static inside a function keeps the variable alive between calls but hides it from other functions.
extern helps share variables across different files in a program.
register is a hint to the compiler and may be ignored by modern compilers.
Storage classes control where and how long variables live in memory.
They help manage variable visibility and lifetime in a program.
Using storage classes properly makes programs more efficient and organized.
Practice
Solution
Step 1: Understand the role of storage classes
Storage classes in C define how long a variable exists and where it can be accessed.Step 2: Differentiate from other concepts
Data types define variable type, arithmetic operations perform calculations, and dynamic memory allocation is separate from storage classes.Final Answer:
To control the lifetime and visibility of variables -> Option DQuick Check:
Storage classes = control lifetime and visibility [OK]
- Confusing storage classes with data types
- Thinking storage classes allocate memory dynamically
- Assuming storage classes perform operations
static storage class in C?Solution
Step 1: Recall correct order of storage class declaration
In C, the storage class specifier comes before the data type.Step 2: Verify each option's syntax
static int count; uses 'static int count;' which is correct. Other options place 'static' incorrectly.Final Answer:
static int count; -> Option BQuick Check:
Storage class before type = correct syntax [OK]
- Placing storage class after variable name
- Mixing order of keywords
- Using invalid syntax like 'count static int;'
void func() {
static int count = 0;
count++;
printf("%d ", count);
}
int main() {
for(int i = 0; i < 3; i++) {
func();
}
return 0;
}Solution
Step 1: Understand static variable behavior inside function
The static variable 'count' retains its value between function calls and initializes only once.Step 2: Trace the loop and function calls
Each call to func() increments count: first call prints 1, second 2, third 3.Final Answer:
1 2 3 -> Option AQuick Check:
Static variable increments across calls = 1 2 3 [OK]
- Assuming static variable resets each call
- Confusing static with automatic variables
- Ignoring initialization behavior
extern int x = 10;
int main() {
printf("%d", x);
return 0;
}Solution
Step 1: Understand 'extern' storage class rules
An 'extern' variable declaration cannot have an initializer; it only declares the variable.Step 2: Analyze the code
Here, 'extern int x = 10;' tries to initialize 'x' which is invalid and causes a compilation error.Final Answer:
'extern' variable cannot be initialized -> Option CQuick Check:
Extern declarations must not initialize variables [OK]
- Initializing extern variables
- Assuming extern means static
- Declaring variables only inside main
Solution
Step 1: Understand variable lifetime and scope requirements
The variable must keep its value between calls (persistent lifetime) and be local to the function (limited scope).Step 2: Match storage classes to requirements
'static' inside a function keeps the variable value between calls and restricts scope to that function.Final Answer:
static -> Option AQuick Check:
Static inside function = persistent and local [OK]
- Using auto which resets each call
- Using extern which is global
- Using register which is for CPU registers
Ready to prove it?
Pass the test and this pattern moves unknown
