auの日記

プログラミング初心者の日記。(auはハンドルネームです)

C言語のstatic

auです。
前回静的変数について記事にしました。
その静的変数を宣言する際に用いる"static"について書きたいと思います。

staticとは

staticとは、日本語で「静的」という意味です。そのままですね
staticを自動変数(ローカル変数)で使用することで値をずっと格納することができるので、ブロック({ })の外でも使用することができるようになります。

#include <stdio.h>

void test() {
    static int a = 0; // 静的変数
    int b = 0; // 自動変数
    a++;
    b++;
    printf("a = %d b = %d\n", a, b);
    return;
}

int main(void) {
    test();
    test();
    test();
    return 0;
}

// 実行結果
a = 1 b = 1
a = 2 b = 1
a = 3 b = 1

静的変数だけ値が増えていることがわかります。3回繰り返しているので
aの値: 1+1+1=3
となります。
それに対して自動変数は値の保持はないので、毎回0に1を足しているがreturnの時に破棄されてしまうので、次の呼び出しのときにはまた0+1となりまた破棄されるということになります。