staticについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
asuka

staticについて

#1

投稿記事 by asuka » 14年前

class Player{
int hp,mp;
char *name
};

static Player g_player;

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

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: staticについて

#2

投稿記事 by みけCAT » 14年前

グローバル変数のstaticは、その変数はそのファイルでしか使えなくなるという意味です。
関数も大体同じような意味だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 14年前

Re: staticについて

#3

投稿記事 by box » 14年前

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

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

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: staticについて

#4

投稿記事 by ISLe » 14年前

ポインタ経由で翻訳単位の外からアクセスすることも可能です。
それだと隠す意味が薄くなってしまいますが。

asuka

Re: staticについて

#5

投稿記事 by asuka » 14年前

とても親切な解説ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る