static | Programming Place Plus 用語集

トップページ用語集

名称 🔗

解説 🔗

いくつかのプログラミング言語において、おもに、静的であることを示すために用いられるキーワードです。

C言語の場合 🔗

C言語では複数の使い道があります。

宣言時に staticキーワードを付けた変数は、静的記憶域期間を持ちます。静的記憶域期間を持つ変数は、プログラム実行している間、つねに存在し続けるため、関数呼び出しが終わってもが維持され、次回の呼び出しでその値を利用できます。

void f(void)
{
    static int x = 0; // 静的記憶域期間を持つ変数
    x++;
    printf("%d\n", x);
}

int main(void)
{
    f(); // 1
    f(); // 2
    f(); // 3
}

詳細は、C言語編「スコープと記憶域期間」を参照してください。

また、ファイルスコープにある変数や関数の定義時に staticキーワードを付けることで、内部結合となり、アクセスを同じ翻訳単位内に限定できます。

static void f(void) // この関数はこのソースファイル内でのみ有効
{
    printf("Hello, World!\n");
}

詳細は、C言語編「複数ファイルによるプログラム」を参照してください。

これらの使い方をする static は、extern や typedef などとともに記憶域クラス指定子に分類されます。このため、static記憶域クラス指定子とか、省略して static指定子と呼ばれることもあります。

このほかに、配列を受け取る関数において(実際には先頭を指すポインタ型変換される)、仮引数のところに static を付ける使い方が存在し、渡される配列の要素が一定以上であることを示すことができます。この使い方をする static は、配列型修飾子に分類されます。

void f(int a[static 10]) // 配列の要素数が最低でも 10以上であることを指定
{
    // ...
}

詳細は、C言語編「ポインタ③(引数や戻り値への利用)」を参照してください。

C++ の場合 🔗

C++ の場合も、C言語の記憶域クラス指定子としての static と同じ使い方ができます。

詳細は、新C++編「ヘッダファイル」「メモリとオブジェクト」を参照してください。

これ以外に、データメンバメンバ関数の宣言時に static を付けることで、クラス単位に存在する静的メンバを定義できます。それぞれ、静的データメンバ静的メンバ関数と呼ばれます。こうした静的メンバは、クラスの特定のインスタンスに依存せず、クラス自体に属するため、クラスのインスタンスがなくてもアクセスできます。

class MyClass {
public:
    static int staticVar; // 静的データメンバの宣言
    
    static void staticFunc() // 静的メンバ関数
    {
        // ...
    }
};

int MyClass::staticVar = 0; // 静的データメンバの定義

詳細は、新C++編「静的メンバ」を参照してください。

参考リンク 🔗

更新履歴 🔗


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る