【C言語】staticの重要な2つの役割

C言語

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キーワードを効果的に活用しましょう。

タイトルとURLをコピーしました