グローバル変数

解決


ぶん  2008-08-08 13:02:15  No: 68828

基本的なのに、今まで曖昧に理解してきたことがあり、お尋ねします。

MFCで、ヘッダファイルで extern で宣言し直し、アプリケーション全体で使えるようにした変数を「外部変数」と言うと思うのです。

この場合、この「外部変数」は、「グローバル変数」でもあるのでしょうか。

逆に言うと、どこかのクラスのソースファイルの先頭近く、

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

の下で普通に宣言した変数は、このクラスでしか使えませんが、よそのクラスでも同じ名前の変数は使えないと思うのです。
この変数は、グローバル変数とは別なのでしょうか。

あまり初歩的なことなので恥ずかしかったのですが、質問しました。
よろしくお願いします。


tetrapod  2008-08-08 19:51:16  No: 68829

質問にて使われている用語が不正確なので、
「何を言ってるのかよくわからん、何が訊きたいのか良くわからん」
というのが正直な感想。で、正確さを追求するためにこっちが言語規格書の文言を使うと、
逆にぶん氏のほうがそれを理解できないであろうに1票。

質問として「どーいう状況でどういう変数を宣言・定義したらどうなる?」
ってのを整理してくれるといいな。


ガッ  2008-08-08 20:32:49  No: 68830

なんとなくプリプロセッサとコンパイラとリンカ(場合によってはVCのプリコンパイル済みヘッダとか)辺りのお話をしなくてはならなさそう.

ちなみにC++,プリプロセッサ,コンパイラ,リンカなどを検索単語としてググると結構でてきたりします.


rin  2008-08-08 21:51:14  No: 68831

「グローバル変数」と「外部変数」で調べればゴロゴロでる
ぶっちゃけ同じ物

また、
「グローバル変数は、一つのプログラム内で、同じ名前は使えない」

「ある宣言・定義されたモノが、別の場所で使えるかどうか」
は別問題。


ぶん  2008-08-08 23:41:31  No: 68832

そんなに深く考えていた訳ではなくて、話の中で、
「あれっ、こういう時は、『グローバル変数』と言ったらいいのかな、
『外部変数』と言ったらいいのかな」
と迷うことがあったからです。

言葉を正確に理解していませんでした。

結論的には、「同じ物」と考えていいのですね。

たいへんありがとうございました。


仲澤@失業者  2008-08-09 00:37:12  No: 68833

解決しているので、あんま  ごちゃごちゃ言いたくないけど。

externな変数とは、本来「翻訳単位外の変数の実体を
仮定してコンパイルし、リンクで解決予定」という、
  「C言語の規格に関する文言」
です。

一方「グローバル変数」とは、プログラム手法であり
  「プログラムの方法論上の文言」
なのです。

従って両者は本来「まったく異なるカテゴリの無関係な文言」
なわけです。


rin  2008-08-09 00:52:55  No: 68834

外部変数にはstaticつけて範囲をしぼった外部変数もあり、
この場合はグローバル変数とは言いがたいものでしたね

誤った答えをしてしまいすいません


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加