変数を宣言する場所と変数の有効範囲は次の通り。
- 関数の外で宣言するとグローバル変数
- 関数の中で宣言するとその関数だけのローカル変数
- コードブロックの中で宣言するとそのブロックだけのローカル変数
また、次の制約がある。
- 変数は使うより前に宣言しなければいけない
関数の外だとグローバル、中だとローカルってのはいいとして、コードブロックのローカル変数ってのは使いどころがよくわからないな。でも本には「実際には、ほとんどのCプログラマは1つの関数で使用するすべての変数をその関数のブロックの最初に宣言します。」って書いてあるから、そうしておけば良さそう。
グローバル変数とローカル変数は同じ名前でも構わない。有効な範囲にローカル変数があればそれが使われる。なければグローバル変数が使われる。
次のプログラムには、同じ count という名前のグローバル変数とローカル変数が使われているけど、それぞれ独立している。
#include void f1(void); int count; /* global */ int main(void) { count = 10; f1(); printf("value of count in main(): %d\n", count); return 0; } void f1(void) { int count; /* local */ count = 1000; printf("value of count in f1(): %d\n", count); }
takatoh@nightschool $ ./sample_4_2 value of count in f1(): 1000 value of count in main(): 10