スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

グローバル変数の続き~

では、今日は予定通りグローバル変数をどうやって使っていくのか
勉強していきたいと思います!
とりあえず例題でも・・・・

int g;

main()
{
g = 10;
func() ;
}

void func()
{
g = 20;
}


まずは1行目から。
このint g;
これがグローバル変数の宣言部分になるそうです。(わかるって・・・?><;

一番上にかかれてますねぇ?
うん。気づきやすい!

一般的に目立つように!と上部に書くことが多いんだって!(目立ちたがりですか。。
そして一番上!ということはもちろん関数の外部で宣言しているってことになりますねー。

こんな風に一番上に書いてあって、しかも!関数の外部に変数の宣言を書いているとなんかあれですね、
まるでその下に書いてある関数ならどこからでも使えるぜ!みたいな鼻息荒いセリフが聞こえてきそうですね~(ぇえ!?

でも実際にすべての関数から使用できるというのがグローバル変数らしいですよ!
ふむふむ。口だけじゃないってことか。。。

ん・・・・でもさ?グローバル変数がファイルのどこにある関数からもアクセスできるとしましょう!
じゃぁさ、そのファイル以外。いわゆるほかのファイルの関数からってどうなの?
すべての関数からアクセス可能さ!っていうくらいだからできるんだよね・・・?

しらべてきました。
ここに別のファイルで宣言されているグローバル変数にアクセスしようとしています。

void func2()
{
g = 30;
}


この結果が↓↓↓↓
コンパイルエラー(`Д´)
なんじゃそりゃーーー!!!
なんでだろう・・・・・・調べてきます。

(カッチコッチカッチコッチ・・・・・・・・・もうしばらくお待ちください)

なんと!
コンパイルしようとしたとき
コンパイラさんは(さん付け・・・?)プログラムのどっかに g というグローバル変数があるのなんてしらないよ!っていってるようです。
ぁあー。。。。なるほど?
そのファイルで宣言されてないと気づけない?
ってことでコンパイラさんにとってみたらそんな変数宣言されてないよーってことになるのかな?
ふむふむ。

おっと。でもこのファイルじゃないところで g っていうグローバル変数を宣言してあってそれにアクセスしますよー。っていうことをコンパイラさんに教えることで使えるようになるんだって!
じゃぁ教え方調べてきます。

extern int g;

void func2()
{
g = 30;
}


extern int g;この部分が他のファイルにグローバル変数が存在してますよーって教えてるんだって!
こうやってexternで教えてあげるとコンパイラさんは「なるほど。どっかにそういう変数があるんだね」
って思ってコンパイルしてくれるんだって~。
もちろんexternで教えてあげればコンパイルしてくれるけど本当にどこかにその変数がなきゃだめらしいです(当たり前だよね・・・
なかった場合は最終段階でそのグローバル変数を見つけられなくてリンクエラーになっちゃうらしいです。(リンクエラーってなんだろ;;

そして!グローバル変数の特徴は最初に0に初期化されているってことらしいです。
なんでかしら・・?
ローカル変数はプログラムが動いている間何度も作られのでそのとびに初期化なんてやってられない!時間の無駄じゃないか!ってことでやってないらしいんですよ。
でもグローバル変数はプログラムの最初から最後までいるわけで初期化されるのも一度きり!ってことで変数の内容を初期化しているんですねー。
もちろん0以外でもOKらしいですよ~
そんなときはグローバル変数を宣言するときついでに指定しちゃえばその値で初期化してくれるそうです。
int g;
だった宣言を
int g = 5;
とかにしたら5で初期化されるってわけですね!なるへそー。

はぁ。。グローバル変数の使い方おわりっ!!!
今日はつかれた><
また明日からも、、、、がんばるぞー('A`)おー。


おい!リンクエラーについてわからないままだろぉ!!!って声がどこからか聞こえてくる・・・
うぅ;;調べればいいんでしょう(´・ω・`)

リンクエラーって「ソースプログラムの文法がすべて合っているときだけ出るエラーです」って書いてありました。
なんじゃそりゃ?と(笑
どう読んでも日本語がおかしいです。。。
どういうことなのかしら!
つまりはプログラムって文法があっていれば作れるってものじゃないんだよ!ってことらしいです。

っていうことはどういう意味ですか?と思った私はさらに突っ込んで調べますよ。
例えば今回のグローバル変数の例ででたエラーみたいに
関数の呼び出しとかにつかってる文法はあってるのに呼んだ関数が実際にはどこにもなかった!とか。(そりゃエラーですって。。
たくさんのファイルをコンパイルしようとすると、そのコンパイルが全部無事に終わったらコンパイラさんはそのたくさんのプログラムをくっつけてひとつのプログラムにしようとするらしいです(つなげるからリンクってことか。
こんなときに関数が足りなかったりすると
くっつけれないよ!→リンクできないって!→リンクエラー
ってなるみたいです。

よし。。。。リンクエラーもわかったし今日は本当におわり!
もう勘弁してください><

たおれてきます('A`)

コメントの投稿

非公開コメント

プロフィール

しー

Author:しー
*使用ソフト*
メタセコ
Blender
modo

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
WEB拍手
カテゴリ
最新コメント
検索フォーム
リンク
ブロとも申請フォーム

この人とブロともになる

いらっしゃいませ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。