• 締切済み

『関数内static変数』の別名って??

1、『関数内static変数』の別名で一言の呼び方ってありますか?? 2、『static変数』と呼ぶときは通常、ファイル内で有効な変数(この場合だとファイルローカルな変数??)と考えてよいのですね? おねがいしますm(_ _)m

みんなの回答

回答No.2

static 変数のもともとの意味は、(Cだと)auto 変数と対比されるもので、呼び出しの度に初期化されない変数のことです。 これは、関数を含むブロックにの中にある変数ですと、そのままの意味で問題ないわけです。 int func() { int n = 0; n++; return n; } の n は、呼び出される度に生成されて初期化されるので、func() の返値は、毎回1です。 これに対して、 static int n = 0; だと、1度しか、生成・初期化されませんから、func() を呼び出す度に返値は変化します。 さて、このようなわけなので、本来、関数やブロックの外にある変数に、static をつけてもつけなくても同じ挙動を示すはずです。 というのとは全く関係なく、関数やブロックの外にある変数(や関数)に、static をつけた時には、外部から参照できないといういみに「してしまおう」というのが、C言語の流儀です。 ですから、C言語では、トップレベルの宣言で、static が付くと、ふぁいっろー刈るになるという、特別な意味づけをしているというのが、むしろ、正解です。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

1. ローカルstatic(静的)変数? 一言じゃないけど。 2. C/C++限定なら、まあほぼそう考えていいとは思います。 ただ、静的変数という言葉自体は、 プログラミング言語の世界で一般的に使われる用語で、 C/C++以外の言語では必ずしもファイルローカルとは限らない。 また、C/C++でも、(extern宣言した)グローバル変数を指して静的変数ということも全くないとは言えない気もするので、 文脈によっては断定は危険か。

関連するQ&A

  • 関数内、ファイルのstatic変数

    関数内で、static変数を宣言した場合に、その値は保持されると 思いますが、その関数の外からポインタで見る場合にその値は 保証されるのでしょうか? (必ず同じメモリ上に配置されるのでしょうか?) また、関数とファイル内static変数においてスコープ以外に 取り扱いが変わったりするのでしょうか? (配置されるメモリ空間等) よろしくお願い致します。

  • 分割ファイルでstatic変数はどのようにすれば良いのでしょうか?

    1つのファイルでstatic変数を使っている場合は気にしていなかったのですが、分割ファイルにした場合、static変数はどのようにすれば各ファイルで利用できるのでしょうか? 通常のグローバル変数の場合はexternとすれば良かったのですが方法がかわりません。 ** test1.cpp static int a; ** test2.cpp ?????? (二重定義になる) あと1ファイルから分割ファイルにした場合に気をつけるべき点など詳しい方教えて下さい。

  • Static変数の必然性について

     今晩は、Cの初心者です、宜しくお願いします。    Global変数とStatic変数の違いがよく分かりせん。  本を読むと、Global変数は「常に同じメモリ上に置かれどの関数からも使用できる」、Static変数は「常に同じ メモリ上に置かれ定義された関数からのみ使用できる」とかいています。  Global変数がどのようなもので、その必要性みたいなものは理解出来るのですが、Static変数については、 Global変数との違い、その必要性、実際にどのような場合に使うのかその必然性みたいものがあるのか理解できません。  いくら本を読んでも、理解出来ないのですが、宜しくご教示願います。

  • static 変数について

    static 変数について 今、C++を勉強しているのですか、static変数がどのように動くのかよくわかりません。 下のプログラムのint a はローカル変数だから、ブロックを抜けたら、初期化されるためstatic変数にして、ブロックを抜けても値を保持するようにすってことはわかるのですが 毎回このブロックに入る度、static int a = 0;を読むことになり、その前に入っていた値はなくなるのではないでしょうか?それとも,static int a と書かれていると,1度しか実行されないから、値が保持され続けるのでしょうか? int add (int x ) { int a = 0; a += x; return a; }

  • Java main関数内でStatic変数使えない

    JavaのStatic変数について質問です。 Main関数の中でStaticな変数を定義しようとしたところ、 final修飾子しか使えませんというエラー文言が出ます。 Main関数内でわざわざStatic変数を使用する必要はないのですが、 出来ないと言われると何故だろうと思ってしまいます。 どなたかご説明いただけないでしょうか? -------------------------------------------------------------------- class Test { public static void main(String[] args) { // 宣言時Staticは使えなく、finalでしか定義できないとエラーが出る Static int test_val = 10; // 表示 System.out.println(test_val); } }

    • ベストアンサー
    • Java
  • static変数について

    struct XXX { char *aaa; char *bbb; }; static struct XXX YYY[] = { {NULL, "JJJ"}, ... }; thread(){ ... } 上記のstatic変数をスレッド関数thread()の外部変数として設定した場合、 *aaaの値はスレッドごとには確保することできませんでしょうか。 上書きされてしまうのでしょうか。 やはりスレッドセーフではないのでしょうか。 その際、どのように設定してあげればよいのでしょうか。 どなたかご教授お願いします。

  • 関数外からstatic変数を再度初期化できるのでしょうか?

    以下の静的変数?についてA,Bのメモリは別でしょうか? test関数外からBの変数を再度初期化できるのでしょうか? staticの仕組みがわからないのでstaticのメモリの初期化のタイミングとメモリアクセス方法について知りたいです。 static x = 1; // ---A int test() { static int x = 0; // --- B } またexternの働きも知りたいです。

  • staticオブジェクト内の変数

    staticなオブジェクト内のローカル変数は、スレッドセーフだと思うのですが、あっていますでしょうか。 例えば、以下の myfoo変数内の、data変数のようなケースです。 public class foobase() { private static foo myfoo = new foo(); . . } public void foo() { String data = "Hello"; }

    • ベストアンサー
    • Java
  • static変数とマルチスレッド

    よろしくお願いします。 マルチスレッドとstatic変数の関係で悩んでいます。 マルチスレッドでグローバルstatic変数は __declspec(thread) static int kensu; ってしないと、マルチスレッド間で同じものになってしまうのはわかっているのですが ファンクション内の場合はどうだったのかわかりません。 ---------------------------- static int aa; multi_th() { func(); } func { static int bb; } ---------------------------- この場合、変数aaはマルチスレッド同士で同じものとなると思うのですが 変数bbはマルチスレッド同士で同じものになってしまうのでしょうか よろしくお願いします。

  • PHP staticな変数

    phpでstaticな変数について教えてください。 ユーザの情報をstaticな変数に格納した際に、誰からでも参照できてしまうのでしょうか? 例えば今ログイン情報を格納するstatic変数があり、ログイン情報を取得してそのstatic変数に値を格納するstaticなメソッドがあるとします。このメソッドは、その変数にまだ値がない場合に、ログイン情報取得してそのあとその変数へ格納し、その変数にすでに値があった場合に、その変数の中身を返す仕様だとします。最初のユーザAがアクセスしてきてその変数にAの情報を格納します。ほぼどうじにユーザBがアクセスしてきた場合は、そのメソッドを呼んだ際に直前に格納されたAの情報が取れてしまうのでしょうか?それともそのstaticな変数にはまだ何もないのでしょうか?よく分かりません。私は間違って理解してしまってるのでしょうか?宜しくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう