関数の中で宣言したスタティック変数は、外部から見えないので安全という点では自動変数と同じですが、関数が呼ばれたときだけ存在するのではなく、その値は関数から戻った後も残ります。ですから、前回呼ばれたときの値を参照することができます。
その例を示します。次の関数は2と3の倍数を避けて次に大きい整数を順に取り出すものです。
#include <stdio.h> int getNext() { static int num; do { num++; } while( (num % 2 == 0 ) || ( num % 3 == 0 ) ); return num; }
ここではnumの初期値をデフォルトの0にしていますが、関数呼び出しの度に初期化されることはありませんから、初期値を
static int num = 1000000;
のように指定することもできます。
この関数は次のように呼び出します。
main() { int n; while( ( n = getNext() ) < 30 ) printf( "%5d\n", n ); }
【クイズ】
上のmainを実行すると、どんな結果が得られるでしょう?
(答えは、次回のTips で ・・・)