class Player{
int hp,mp;
char *name
};
static Player g_player;
static void Func();
int main(){
}
グローバル変数にstaticがついている場合はどうような意味でしょうか?
また関数にもstaticがついている場合も同じ意味なのでしょうか?
お願いします
staticについて
Re: staticについて
グローバル変数のstaticは、その変数はそのファイルでしか使えなくなるという意味です。
関数も大体同じような意味だと思います。
関数も大体同じような意味だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: staticについて
そのファイルでしか使えない(≒他のファイルで使ってはいけない)、というのはちょっと違っています。
その変数や関数が、その変数や関数を含む翻訳単位(ザックリいうと*.cとか*.cppとかいうことです)の
外からは見えなくなる、ということです。
複数の翻訳単位上で、同じ名前のstaticな外部変数や、同じ名前のstaticな関数を
定義することそのものは、できます。
例えば、a.cとb.cという複数の翻訳単位の両方で、
static int n;
という変数定義は、できます。
ただし、a.c上のnと、b.c上のnとは、別物(別々の名前空間に属する)となります。
つまり、a.c上のnは、他の翻訳単位からは見えない、また、
b.c上のnは、他の翻訳単位からは見えない、というのが正確です。
その変数や関数が、その変数や関数を含む翻訳単位(ザックリいうと*.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について
ポインタ経由で翻訳単位の外からアクセスすることも可能です。
それだと隠す意味が薄くなってしまいますが。
それだと隠す意味が薄くなってしまいますが。