【ハウツー】
関数の中で宣言された変数は、ローカル変数(内部変数)と呼びます。ローカル変数は、他の関数に影響を与えないという意味で非常に良い性質を持ちますが、複数の関数の間で同じ変数を共有するということができません。基本的に、複数の関数の間で値を受け渡しするにはパラメータと戻り値を用いるべきですが、特定の関数の間ではなく、より広域的にデータを共有したいということもあるでしょう。このようなときに使われるのが、関数の外で宣言されるグローバル変数(外部変数)です。
グローバル変数は、関数の外で宣言された変数という点を除けば、普通の変数です。これまでの変数と同じように、型と名前を指定し、任意の関数の処理で値を代入したり、取得したりすることができます。ただし、グローバル変数の値はすべての関数で共有されるため、個々の関数が無秩序に値を変更すると、思わぬバグを生み出す温床になるので注意が必要です。
#include <stdio.h>
int value;
void showValue(void)
{
printf("value=%d\n", value);
}
int main(void)
{
value = 100;
showValue();
return 0;
}
![]() |
サンプル06の実行結果 |
サンプル06は、関数の外にint型のvalue変数を宣言しています。この変数はグローバル変数として機能するため、ファイル全体がスコープとなります。よって、複数の関数からvalue変数を利用することができます。このプログラムでは、main()関数でvalue変数に100を代入し、その後 showValue()変数でvalue変数を表示しています。どちらの関数からも、value変数を利用できていることが確認できます。
グローバル変数とローカル変数が同じ名前の場合、ローカル変数が優先されます。次のような場合、実行結果がどのようになるか想像してください。
int value = 10;
void func(void)
{
int value = 100;
printf("%d\n", value)
}
グローバル変数valueは10で初期化され、func()関数内のローカル変数valueは100で初期化されています。func()関数内で、printf()関数のパラメータとしてvalue変数を指定しています。printf()関数は、パラメータに指定されたvalue変数の値を表示しますが、このときどちらの値が用いられるかが問題です。結果は、ローカル変数の値が優先され100となります。
| ゼロからはじめるC言語 - 構造体編 [2008/9/16] |
| ゼロからはじめるC言語 - 配列編 [2008/8/28] |
| ゼロからはじめるC言語 - 繰り返し編 [2008/8/13] |
| ゼロからはじめるC言語 - 選択編 [2008/7/25] |
| ゼロからはじめるC言語 - 変数編 [2008/7/16] |
| ゼロからはじめるC言語 - 型・定数編 [2008/7/7] |
| ゼロからはじめるC言語 - 関数編 [2008/6/25] |
| ゼロからはじめるC言語 - 環境構築編 [2008/6/17] |
| 【レポート】マカフィーの世界の専門家の意識調査「サイバー防衛報告書」とセキュリティソリューション [21:15 5/25] |
| アップル、Aperture 3.2.4を公開 - バグ修正、安定性向上など [20:51 5/25] |
| 【レポート】GTC 2012 - VGXでエンタープライズ環境でのGPU需要開拓を狙うNVIDIA [20:07 5/25] |
| デル、期間限定キャンペーンに特価アイテム追加、アップグレード無料も継続 [19:41 5/25] |
| 上海問屋、iPhoneとほぼ同じ薄さのバッテリ内蔵ヘッドホンアンプ [19:05 5/25] |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第104回 今回のお題は…「be superior to」 [20:00 5/26] キャリア |
|
[木下優樹菜]妊娠7カ月でガールズアワード登場 [19:50 5/26] エンタメ |
|
「電撃20年祭」大サイン会、田中久仁彦や岸田メルら集結 [19:42 5/26] ホビー |
|
[AKB48・指原莉乃]総選挙速報4位に「キープしたい」 [19:05 5/26] ホビー |
|
[モーニング娘。]新体制でガールズアワード初登場 新曲初披露に先輩・矢口も絶賛 [18:48 5/26] エンタメ |