Bird
Raised Fist0
Cprogramming~10 mins

Static storage class - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Static storage class
Declare static variable
↓
Variable stored in static memory
↓
Function called multiple times
↓
Variable retains value between calls
↓
Program ends
Static variables keep their value between function calls by storing data in a fixed memory location.
Execution Sample
C
#include <stdio.h>

void counter() {
    static int count = 0;
    count++;
    printf("Count: %d\n", count);
}

int main() {
    counter(); counter(); counter();
    return 0;
}
This code shows a static variable 'count' that keeps increasing each time the function is called.
Execution Table
Call Numbercount Before IncrementActioncount After IncrementOutput
10 (initialized)count++1Count: 1
21count++2Count: 2
32count++3Count: 3
----Function calls end
💡 After 3 calls, program ends; static variable 'count' retains last value 3.
Variable Tracker
VariableStartAfter Call 1After Call 2After Call 3Final
count0 (initialized)1233
Key Moments - 2 Insights
Why does 'count' not reset to 0 on each function call?
Because 'count' is declared static, it is initialized only once and keeps its value between calls, as shown in the execution_table rows 1 to 3.
What would happen if 'count' was not static?
Without static, 'count' would be reinitialized to 0 every call, so output would always be 'Count: 1' (see execution_table for static behavior contrast).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'count' before the second call increments it?
A0
B1
C2
D3
💡 Hint
Check the 'count Before Increment' column for Call Number 2 in the execution_table.
At which call does 'count' become 3?
AThird call
BSecond call
CFirst call
DNever
💡 Hint
Look at the 'count After Increment' column in the execution_table.
If 'count' was not static, what would be the output on the third call?
ACount: 3
BCount: 2
CCount: 1
DNo output
💡 Hint
Refer to key_moments explanation about non-static variable behavior.
Concept Snapshot
Static storage class in C:
- Declared with 'static' keyword inside functions.
- Variable initialized only once.
- Retains value between function calls.
- Stored in static memory, not stack.
- Useful for preserving state without global variables.
Full Transcript
This visual trace shows how a static variable 'count' inside a function keeps its value between calls. Initially, 'count' is set to 0 once. Each time the function runs, 'count' increases by 1 and prints the new value. Unlike normal local variables, 'count' does not reset to 0 on each call. The execution table tracks 'count' before and after increment for each call, showing it grows from 0 to 3 over three calls. Key moments clarify why static variables behave this way and what would happen without 'static'. The quiz tests understanding of variable values at different steps. This helps beginners see how static storage class works step-by-step.

Practice

(1/5)
1. What does the static keyword do when used with a variable inside a function in C?
easy
A. Keeps the variable value between function calls
B. Makes the variable global
C. Deletes the variable after the function ends
D. Allows the variable to be accessed from other files

Solution

  1. Step 1: Understand static inside a function

    A static variable inside a function keeps its value even after the function finishes.
  2. Step 2: Compare with other options

    Static does not make variables global or accessible outside the file; it preserves value only inside the function.
  3. Final Answer:

    Keeps the variable value between function calls -> Option A
  4. Quick Check:

    Static inside function = value preserved [OK]
Hint: Static inside function means value stays between calls [OK]
Common Mistakes:
  • Thinking static makes variable global
  • Assuming static deletes variable after function ends
  • Confusing static with extern keyword
2. Which of the following is the correct way to declare a static variable inside a function in C?
easy
A. static count int = 0;
B. static int count = 0;
C. int static count = 0;
D. count static int = 0;

Solution

  1. Step 1: Recall correct static syntax

    The correct syntax places static before the type: static int count = 0;.
  2. Step 2: Check other options

    Other options have wrong order of keywords, which is invalid in C.
  3. Final Answer:

    static int count = 0; -> Option B
  4. Quick Check:

    Static keyword comes before type [OK]
Hint: Static always comes before the type in declaration [OK]
Common Mistakes:
  • Placing static after the variable name
  • Mixing order of keywords
  • Using invalid syntax like 'static count int'
3. What will be the output of the following C code?
void func() {
    static int x = 0;
    x++;
    printf("%d ", x);
}

int main() {
    for(int i = 0; i < 3; i++) {
        func();
    }
    return 0;
}
medium
A. 1 1 1
B. 0 1 2
C. 1 2 3
D. 3 3 3

Solution

  1. Step 1: Understand static variable behavior in func()

    The static variable x is initialized once to 0 and keeps its value between calls.
  2. Step 2: Trace the loop calls

    Each call increments x by 1 and prints it. So outputs are 1, then 2, then 3.
  3. Final Answer:

    1 2 3 -> Option C
  4. Quick Check:

    Static variable increments across calls [OK]
Hint: Static variable keeps incrementing each call [OK]
Common Mistakes:
  • Assuming static resets each call
  • Confusing initial value with printed value
  • Expecting output to be zeros
4. Identify the error in the following code snippet:
void func() {
    static int x;
}

int main() {
    x = 5;
    func();
    return 0;
}
medium
A. No error, code runs fine
B. Missing initialization of static variable x
C. Static variables cannot be declared inside functions
D. Static variable x cannot be assigned outside its function

Solution

  1. Step 1: Check variable scope

    The static variable x is declared inside func(), so it is local to that function.
  2. Step 2: Analyze assignment in main()

    Trying to assign x = 5; in main() causes an error because x is not visible outside func().
  3. Final Answer:

    Static variable x cannot be assigned outside its function -> Option D
  4. Quick Check:

    Static inside function = local scope [OK]
Hint: Static inside function is local, can't access outside [OK]
Common Mistakes:
  • Thinking static variables are global
  • Ignoring variable scope rules
  • Assuming static variables must be initialized
5. Consider two C files: file1.c and file2.c.

In file1.c:
static int count = 0;

void increment() {
    count++;
}

int getCount() {
    return count;
}

In file2.c:
extern int count;

int main() {
    increment();
    printf("%d", getCount());
    return 0;
}

What will happen when you compile and run these files together?
hard
A. Compilation error due to undefined reference to count
B. Prints 1
C. Prints 0
D. Runtime error due to static variable

Solution

  1. Step 1: Understand static at file scope

    The static int count has internal linkage, visible only in file1.c.
  2. Step 2: Function access

    increment() and getCount() are external functions that can access the static count since they are in the same file.
  3. Step 3: Analyze extern usage

    The declaration extern int count; in file2.c expects a global variable count defined elsewhere, but since count is static in file1.c, it is not visible externally, causing a linker error.
  4. Final Answer:

    Compilation error due to undefined reference to count -> Option A
  5. Quick Check:

    Static variables have internal linkage, extern cannot access them [OK]
Hint: Static variables limited to file scope, extern can't access [OK]
Common Mistakes:
  • Assuming static variables are global across files
  • Expecting extern to find static variables
  • Ignoring linker errors
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard