C言語において、staticというキーワードを目にすることがあると思います。C言語のstaticキーワードには「静的」という意味以外に、もうひとつ別の役割があります。
本記事では、C言語におけるstaticの役割について紹介します。
役割1:静的にメモリを確保する
通常、C言語で関数内にローカル変数を定義すると、その変数は関数が呼び出されたときに作成され、関数の処理を終えると破棄されます。これは自動変数と呼ばれ、スタックに割り当てられます。
これに対して、staticキーワードを使用してローカル変数を宣言した場合、その変数のメモリは静的に確保され、プログラム終了まで存在し続けます。
void counterFunction()
{
static int counter = 0;
counter++;
printf("Counter: %d\n", counter);
}
これにより、関数が呼ばれた回数をカウントするなど、複数回の関数実行において、値を保持する使用が可能になります。
役割2:外部へのシンボル公開を抑止する
C言語における、もう一つの重要なstaticの役割は、変数や関数シンボルの外部への公開を抑止することです。
// この変数シンボルは、ファイル外からアクセス可能
int globalVariable;
// この変数シンボルは、ファイル外からのアクセス不可 ★
static int internalVariable;
// この関数シンボルは、ファイル外からのアクセス不可 ★
static int internalFunction()
{
return 0;
}
staticを付けていないグローバル変数や関数は、外部のファイルから参照できますが、staticをつけて宣言した変数や関数は、定義されたファイル内でのみ参照可能になり、外部からのアクセスが制限されます。
この働きは、オブジェクト指向言語の private によく似ており、staticを使用することにより、関数や変数をファイル内にカプセル化することができます。これは、大規模なプロジェクトにおいて名前の衝突を避けたり、インターフェイスと実装の分離を行うのに有効です。
まとめ
staticキーワードは、C言語において重要な2つの役割を持っています。
- 静的にメモリを確保する
- 外部へのシンボル公開を抑止する
これらの役割を理解して、staticキーワードを効果的に活用しましょう。