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となりまた破棄されるということになります。