• ベストアンサー

スコープについて

グローバル変数とポインタが定義されているファイル外でもスコープが適用となるのかどうかが判りません。 ローカル変数は関数内ですよね。 グローバル変数はどの関数内でも値を変えられる。ポインタも受け渡しをちゃんと行えば違う関数内の変数の値を変えられる。 これって異なるファイル間でも同じですか? (Aというファイルで定義されたグローバル変数やポインタがBというファイル内でも使えるのかどうか) よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

いろいろな概念がごっちゃになっている気がします。この部分を曖昧にしたままで、コード片を書いて試してみても、本当に理解することは難しいでしょう。 まずは、それぞれの用語の定義を再確認してください。 スコープ(=有効範囲)というのは、識別子が可視となる範囲のことで、ファイルの内外は直接関係ありません。有効範囲の種類は、関数有効範囲、ファイル有効範囲、ブロック有効範囲、および関数原型有効範囲の4種類があります。 ファイルの内外という観点であれば、#includeで取り込まれた別ファイルもファイルの外ということになりますので、より厳密には「翻訳単位」という用語を使います。 翻訳単位の外側から識別子が可視になるかどうかは、有効範囲ではなく、識別子の結合によります。結合には、外部結合、内部結合、および無結合の3種類があります。 また、ポインタを介した場合ですが、これは有効範囲や結合とは全く別の問題です。おそらく記憶域期間の概念と有効範囲を混同しているものと思います。記憶域期間には、静的記憶域期間、自動記憶域期間、および割付記憶域期間の3種類があります。 最後に、グローバル変数とかローカル変数というのは、言語規格上は定義がありませんので、あまり厳密な表現ではありません。外部結合を持つオブジェクトのみをグローバル変数と呼ぶ人もいれば、内部結合のものまで含めてグローバル変数と呼ぶ人もいるからです。 というわけで、ここまでで検索するのに必要なキーワードは列挙したつもりです。後は、ご自身で納得いくまで調べてみてください。

noname#50824
質問者

お礼

遅くなってしまいすいません。 関数内で有効、ファイル内で有効(グローバル変数?)、ブロック内で有効、プロトタイプ宣言内でのみ有効(?)という事ですよね。 さらに記憶域期間や結合があると。 もういっぺん頭の中整理します。詳しくありがとうございます。

その他の回答 (3)

  • meruty
  • ベストアンサー率81% (9/11)
回答No.3

回答撤回です。 安易に回答したことを反省しています。 #1で回答されているとおりで、やってみてから質問されてはいかがですか?ご質問の文面から、変数の宣言や、スコープという概念はおわかりのようですから、自分で「どうなるか試してみる」ことはできると思います。

  • meruty
  • ベストアンサー率81% (9/11)
回答No.2

使えます。ただし、使う側のファイルに「別のファイルで定義されている変数(またはポインタ)ですよ」ということをexternキーワードで教えてあげる必要があります。 ファイルA int 変数名1; int* 変数名2; ファイルB extern int 変数名1; extern int* 変数名2; void 関数(){  int n = 10;  変数名1 = 5;  変数名2 = &n; } 別ファイルでファイルAのグローバル変数をextern宣言しないならば、ファイルA内だけのスコープですが、別ファイルでextern宣言「される可能性がないとは限らない」ので、グローバルスコープを持つと言えます。 extern宣言なしでは使えません。extern宣言をしたファイルでのみ使用可能となります。

参考URL:
http://homepage1.nifty.com/aok2/004/c01.html
noname#50824
質問者

お礼

遅くなってしまいすいません。 自分でも色々と試してみます。 ありがとうございました。

回答No.1

やってみたらいかがですか? --- a.c int g; void set(int n) { g = n; } --- b.c #include <stdio.h> int main() {   extern int g;   void set(int);   set(12345);   pritnf("%d\n", g);   return 0; }

noname#50824
質問者

お礼

遅くなってしまいすいません。 返答ありがとうございます。 参考になりました。

関連するQ&A