# Static variables in C

> Learn how static variables work in C: declared with the static keyword inside a function, they default to 0 and keep their value across function calls.

Author: [Flavio Copes](https://flaviocopes.com/about/) | Published: 2020-02-24 | Topics: [C](https://flaviocopes.com/tags/clang/) | Canonical: https://flaviocopes.com/c-static-variables/

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:

```c
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:

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

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

```c
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](https://flaviocopes.com/c-arrays/). In this case, each single item in the array is initialized to 0:

```c
int incrementAge() {
  static int ages[3];
  ages[0]++;
  return ages[0];
}
```
