基本的なのに、今まで曖昧に理解してきたことがあり、お尋ねします。
MFCで、ヘッダファイルで extern で宣言し直し、アプリケーション全体で使えるようにした変数を「外部変数」と言うと思うのです。
この場合、この「外部変数」は、「グローバル変数」でもあるのでしょうか。
逆に言うと、どこかのクラスのソースファイルの先頭近く、
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
の下で普通に宣言した変数は、このクラスでしか使えませんが、よそのクラスでも同じ名前の変数は使えないと思うのです。
この変数は、グローバル変数とは別なのでしょうか。
あまり初歩的なことなので恥ずかしかったのですが、質問しました。
よろしくお願いします。
質問にて使われている用語が不正確なので、
「何を言ってるのかよくわからん、何が訊きたいのか良くわからん」
というのが正直な感想。で、正確さを追求するためにこっちが言語規格書の文言を使うと、
逆にぶん氏のほうがそれを理解できないであろうに1票。
質問として「どーいう状況でどういう変数を宣言・定義したらどうなる?」
ってのを整理してくれるといいな。
なんとなくプリプロセッサとコンパイラとリンカ(場合によってはVCのプリコンパイル済みヘッダとか)辺りのお話をしなくてはならなさそう.
ちなみにC++,プリプロセッサ,コンパイラ,リンカなどを検索単語としてググると結構でてきたりします.
「グローバル変数」と「外部変数」で調べればゴロゴロでる
ぶっちゃけ同じ物
また、
「グローバル変数は、一つのプログラム内で、同じ名前は使えない」
と
「ある宣言・定義されたモノが、別の場所で使えるかどうか」
は別問題。
そんなに深く考えていた訳ではなくて、話の中で、
「あれっ、こういう時は、『グローバル変数』と言ったらいいのかな、
『外部変数』と言ったらいいのかな」
と迷うことがあったからです。
言葉を正確に理解していませんでした。
結論的には、「同じ物」と考えていいのですね。
たいへんありがとうございました。
解決しているので、あんま ごちゃごちゃ言いたくないけど。
externな変数とは、本来「翻訳単位外の変数の実体を
仮定してコンパイルし、リンクで解決予定」という、
「C言語の規格に関する文言」
です。
一方「グローバル変数」とは、プログラム手法であり
「プログラムの方法論上の文言」
なのです。
従って両者は本来「まったく異なるカテゴリの無関係な文言」
なわけです。
外部変数にはstaticつけて範囲をしぼった外部変数もあり、
この場合はグローバル変数とは言いがたいものでしたね
誤った答えをしてしまいすいません
ツイート | ![]() |