【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.22214

externの使用方法
投稿者---mongoru(2005/07/27 19:51:06)


大域変数externについて質問します。

externは、1つの変数を複数のファイルで利用したいときに
使用すると理解しています。

以下のような状況のときにはどのように利用すればいいのでしょうか?
例えば、ヘッダファイル
std.h
extern int number;

としたときに、この変数をa1.c、a2.c、a3.cの3つのファイルで利用したい
ときどのように記述すればいいのでしょうか?

a1.c
int number;

a2.c
int number;

a3.c
int number;

といった感じでいいのでしょうか?

初歩的な質問ですが、宜しくお願いします。


※ OS環境は、LINUXです


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:externの使用方法 22216 まきじ 2005/07/27 20:04:10
<子記事> Re:externの使用方法 22217 YuO 2005/07/27 20:06:21


No.22216

Re:externの使用方法
投稿者---まきじ(2005/07/27 20:04:10)


a1.c a2.c a3.c のいずれかで、int number と定義して、同じ変数 number を
使いたいファイルで std.h を include すれば良いと思います。

a1.c に int number があるとしたら、a2.c と a3.c に std.h を include する。


この投稿にコメントする

削除パスワード

No.22218

Re:externの使用方法
投稿者---mongoru(2005/07/27 20:17:09)


>a1.c a2.c a3.c のいずれかで、int number と定義して、同じ変数 number を
>使いたいファイルで std.h を include すれば良いと思います。
>
>a1.c に int number があるとしたら、a2.c と a3.c に std.h を include する。

まきじさん
有難うございます。
おしゃるとおりにすれば、解決しました。

std.h
extern int number;

a1.c
#include "std.h"
int number = 10;

a2.c
#include "std.h"

a2.c
#include "std.h"


どうも有難うございました。


この投稿にコメントする

削除パスワード

No.22217

Re:externの使用方法
投稿者---YuO(2005/07/27 20:06:21)


>としたときに、この変数をa1.c、a2.c、a3.cの3つのファイルで利用したい
>ときどのように記述すればいいのでしょうか?

どこか一つの翻訳単位で定義することになります。
つまり,a1.c / a2.c / a3.cの何れかのファイル中で,
int number;
と定義すればよいです。

さらに,このnumberを使用している場合(sizeof演算子のオペランドになる場合を除く),
プログラム中できっちり一度だけ定義していなければなりません。
つまり,a1.cで定義したのであれば,a2.cおよびa3.cで定義してはいけません。



この投稿にコメントする

削除パスワード

No.22219

Re:externの使用方法
投稿者---mongoru(2005/07/27 20:18:10)


>>としたときに、この変数をa1.c、a2.c、a3.cの3つのファイルで利用したい
>>ときどのように記述すればいいのでしょうか?
>
>どこか一つの翻訳単位で定義することになります。
>つまり,a1.c / a2.c / a3.cの何れかのファイル中で,
>int number;
>と定義すればよいです。
>
>さらに,このnumberを使用している場合(sizeof演算子のオペランドになる場合を除く),
>プログラム中できっちり一度だけ定義していなければなりません。
>つまり,a1.cで定義したのであれば,a2.cおよびa3.cで定義してはいけません。


YuOさん
有難うございます。
おしゃるとおりにすれば、解決しました。

std.h
extern int number;

a1.c
#include "std.h"
int number = 10;

a2.c
#include "std.h"

a2.c
#include "std.h"


どうも有難うございました。


この投稿にコメントする

削除パスワード

No.22243

Re:externの使用方法
投稿者---mongoru(2005/07/28 15:48:15)


>どこか一つの翻訳単位で定義することになります。
>つまり,a1.c / a2.c / a3.cの何れかのファイル中で,
>int number;
>と定義すればよいです。

度々ですが、質問があります。
上記内容で理解できていない点が1つあります。

>どこか一つの翻訳単位で定義することになります。

とありますが、どこか1つであればどのファイルでも良いのでしょうか?

例えば、a1.c、a2.c、a3.cとあった場合、
大域変数のint numberが一番初めに使用されるファイルがa1.cだとして
もa2.cに

a2.c
"std.h"
int number;

と定義していても問題ないのでしょうか?この場合、a1.cでnumberを
使用するので、

a1.c
"std.h"
int number;

といった考え方をしなくても良いのでしょうか?


この投稿にコメントする

削除パスワード

No.22244

Re:externの使用方法
投稿者---REE(2005/07/28 16:12:17)


>>どこか一つの翻訳単位で定義することになります。
>
>とありますが、どこか1つであればどのファイルでも良いのでしょうか?

はい、どこでもよいです。
例えば、その変数を使わないファイルでも構いません。

>例えば、a1.c、a2.c、a3.cとあった場合、
>大域変数のint numberが一番初めに使用されるファイルがa1.cだとして
>(略)
>といった考え方をしなくても良いのでしょうか?

良いです。
実際に使用されるときには、どの関数からもその変数が見えますので、全く問題ありません。



この投稿にコメントする

削除パスワード

No.22245

Re:externの使用方法
投稿者---mongoru(2005/07/28 16:17:28)


>>例えば、a1.c、a2.c、a3.cとあった場合、
>>大域変数のint numberが一番初めに使用されるファイルがa1.cだとして
>>(略)
>>といった考え方をしなくても良いのでしょうか?
>
>良いです。
>実際に使用されるときには、どの関数からもその変数が見えますので、全く問題ありません。


REEさん、有難うございます。

これは、処理系に依存するということはないでしょうか?


この投稿にコメントする

削除パスワード

No.22246

Re:externの使用方法
投稿者---REE(2005/07/28 16:39:23)


>これは、処理系に依存するということはないでしょうか?

もし、グローバル変数の初期化タイミングの心配されているのであれば、
main関数実行前に、全てのグローバル変数の初期化が行われますので、心配ありません。

もし、それ以外の心配があるのでしたら、具体的に聞いてください。



この投稿にコメントする

削除パスワード

No.22248

Re:externの使用方法
投稿者---mongoru(2005/07/28 17:02:46)


>>これは、処理系に依存するということはないでしょうか?
>
>もし、グローバル変数の初期化タイミングの心配されているのであれば、
>main関数実行前に、全てのグローバル変数の初期化が行われますので、心配ありません。
>
>もし、それ以外の心配があるのでしたら、具体的に聞いてください。

それを聞いて安心しました。
どうも有難うございました。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧