Skip to content

Static variables in C

New Course Coming Soon:

Get Really Good at Git

How to work with static variables in C

Inside a function, you can initialize a static variable using the static keyword.

I said “inside a function”, because global variables are static by default, so there’s no need to add the keyword.

What’s a static variable? A static variable is initialized to 0 if no initial value is specified, and it retains the value across function calls.

Consider this function:

int incrementAge() {
  int age = 0;
  age++;
  return age;
}

If we call incrementAge() once, we’ll get 1 as the return value. If we call it more than once, we’ll always get 1 back, because age is a local variable and it’s re-initialized to 0 on every single function call.

If we change the function to:

int incrementAge() {
  static int age = 0;
  age++;
  return age;
}

Now every time we call this function, we’ll get an incremented value:

printf("%d\n", incrementAge());
printf("%d\n", incrementAge());
printf("%d\n", incrementAge());

will give us

1
2
3

We can also omit initializing age to 0 in static int age = 0;, and just write static int age; because static variables are automatically set to 0 when created.

We can also have static arrays. In this case, each single item in the array is initialized to 0:

int incrementAge() {
  static int ages[3];
  ages[0]++;
  return ages[0];
}
Are you intimidated by Git? Can’t figure out merge vs rebase? Are you afraid of screwing up something any time you have to do something in Git? Do you rely on ChatGPT or random people’s answer on StackOverflow to fix your problems? Your coworkers are tired of explaining Git to you all the time? Git is something we all need to use, but few of us really master it. I created this course to improve your Git (and GitHub) knowledge at a radical level. A course that helps you feel less frustrated with Git. Launching Summer 2024. Join the waiting list!
→ Get my C Handbook

Here is how can I help you: