いくつかのプログラミング言語において、おもに、静的であることを示すために用いられるキーワードです。
C言語では複数の使い道があります。
宣言時に staticキーワードを付けた変数は、静的記憶域期間を持ちます。静的記憶域期間を持つ変数は、プログラムを実行している間、つねに存在し続けるため、関数の呼び出しが終わっても値が維持され、次回の呼び出しでその値を利用できます。
void f(void)
{
static int x = 0; // 静的記憶域期間を持つ変数
++;
x("%d\n", x);
printf}
int main(void)
{
(); // 1
f(); // 2
f(); // 3
f}
詳細は、C言語編「スコープと記憶域期間」を参照してください。
また、ファイルスコープにある変数や関数の定義時に staticキーワードを付けることで、内部結合となり、アクセスを同じ翻訳単位内に限定できます。
static void f(void) // この関数はこのソースファイル内でのみ有効
{
("Hello, World!\n");
printf}
詳細は、C言語編「複数ファイルによるプログラム」を参照してください。
これらの使い方をする static は、extern や typedef などとともに記憶域クラス指定子に分類されます。このため、static記憶域クラス指定子とか、省略して static指定子と呼ばれることもあります。
このほかに、配列を受け取る関数において(実際には先頭を指すポインタに型変換される)、仮引数のところに static を付ける使い方が存在し、渡される配列の要素が一定以上であることを示すことができます。この使い方をする static は、配列型修飾子に分類されます。
void f(int a[static 10]) // 配列の要素数が最低でも 10以上であることを指定
{
// ...
}
詳細は、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で書く |
![]() |
管理者情報 | プライバシーポリシー |