ページ 11

staticについて

Posted: 2011年3月15日(火) 21:30
by asuka
class Player{
int hp,mp;
char *name
};

static Player g_player;

static void Func();
int main(){
}

グローバル変数にstaticがついている場合はどうような意味でしょうか?
また関数にもstaticがついている場合も同じ意味なのでしょうか?
お願いします

Re: staticについて

Posted: 2011年3月15日(火) 21:44
by みけCAT
グローバル変数のstaticは、その変数はそのファイルでしか使えなくなるという意味です。
関数も大体同じような意味だと思います。

Re: staticについて

Posted: 2011年3月15日(火) 22:58
by box
そのファイルでしか使えない(≒他のファイルで使ってはいけない)、というのはちょっと違っています。
その変数や関数が、その変数や関数を含む翻訳単位(ザックリいうと*.cとか*.cppとかいうことです)の
外からは見えなくなる、ということです。

複数の翻訳単位上で、同じ名前のstaticな外部変数や、同じ名前のstaticな関数を
定義することそのものは、できます。
例えば、a.cとb.cという複数の翻訳単位の両方で、
static int n;
という変数定義は、できます。
ただし、a.c上のnと、b.c上のnとは、別物(別々の名前空間に属する)となります。
つまり、a.c上のnは、他の翻訳単位からは見えない、また、
b.c上のnは、他の翻訳単位からは見えない、というのが正確です。

Re: staticについて

Posted: 2011年3月16日(水) 01:20
by ISLe
ポインタ経由で翻訳単位の外からアクセスすることも可能です。
それだと隠す意味が薄くなってしまいますが。

Re: staticについて

Posted: 2011年3月16日(水) 13:25
by asuka
とても親切な解説ありがとうございます。