C - Scope and Storage Classes
Scope determines where a name is visible. Storage class determines lifetime and linkage.
Learning Objectives
- Differentiate block, file, and global scope.
- Use static,extern, and automatic storage correctly.
Examples
#include <stdio.h>
int file_scope = 1;      // external linkage by default
static int internal = 2; // internal linkage (file-only)
void f(void) {
  static int counter = 0; // persists across calls
  int local = 5;          // automatic storage
  counter++;
  printf("%d %d %d\n", file_scope, internal, counter);
}
int main(void) {
  f(); f(); f();
}
Common Pitfalls
- Forgetting staticwhen you want to preserve state across calls.
- Confusing staticat file scope (internal linkage) vs inside a function (persistent lifetime).