Cygwinでデバッグ/変数の通用範囲
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[Cygwinでデバッグ]]
#contents
** 変数の通用範囲 [#e45347e8]
変数は、定義された場所によって、使える場所(通用範囲)が...
*** ローカル変数 [#a21462f4]
ローカル(局所)変数とは、関数の中で定義された変数のこと...
int func(int x) {
int sum = 0;
for (int i=0; i<10; i++) {
int y = x + i;
sum = sum + y * y;
} y, i の通用範囲ここまで
// sum = sum + y * y; ←コンパイルエラーになる
// return i; ←コンパイルエラーになる
return sum;
} sum, x の通用範囲ここ...
int other(int y) {
// return x; ←コンパイルエラーになる
// return sum; ←コンパイルエラーになる
return y + 5;
}
sum という変数は、関数 func の中で定義してありますので、...
関数の仮引数は、その関数の内側のブロックで定義されたもの...
*** グローバル変数 [#df2c31e5]
グローバル(大域)変数とは、関数の外で定義された変数のこ...
int a = 0; // グローバル変数
void add2(void) { a = a + 2; }
void add5(void) { a = a + 5; }
int main() {
printf("%d\n", a); // 0
add2();
printf("%d\n", a); // 2
add5();
printf("%d\n", a); // 7
}
a という変数は関数の外側で定義されているので、main 関数で...
グローバル変数は、一見したところ便利なように思えます。関...
*** 変数名の重複 [#g22b9d8c]
変数名は、同じスコープ(ブロック)では重複できません。
void func(void) {
int a;
double a; // コンパイルエラー
}
スコープが異なると、変数名が重複してもよくなります。異な...
void func(void) { int x = 0; printf("%d", x); } // 0
void other(void) { int x = 5; printf("%d", x); } // 5
スコープが入れ子になっている場合は、内側のスコープの変数...
int a = 5; // グローバル変数
int func(void) {
printf("%d\n", a); // 5, グローバル変数
}
int other(void) {
int a = 10; // ローカル変数
printf("%d\n", a); // 10, ローカル変数
}
スコープの広いグローバル変数には、名前の重複を避けるため...
*** スコープは狭く [#i2e230ce]
グローバル変数を用いた、悪い例を示します。ループで用いる...
int i; // 定義を一度ですませたい
void func(void) { for (i=1; i<=3; i++) printf("%d ", i)...
void other(void) { for (i=1; i<=3; i++) func(); } // 1 2...
int main() {
other(); // 1 2 3
}
関数 other では3回ループを行い、関数 func を3回呼び出し...
以下のように改善すると、for ループごとに i を定義しなおし...
void func(void) { for (int i=1; i<=3; i++) printf("%d "...
void other(void) { for (int i=1; i<=3; i++) func(); } //...
int main() {
other(); // 1 2 3 1 2 3 1 2 3
}
ローカル変数であっても、スコープも狭くしておくとメリット...
int main() {
// int i; // ここで定義しているとエラーにならない
for (int i=0; i<10; i++) { /* iはこのブロック専用 */ }
for (int k=0; k<10; i++) { ... } // i は使えないので...
...
}
2つめのforループでは k++ とすべきところを i++ とタイプミ...
終了行:
[[Cygwinでデバッグ]]
#contents
** 変数の通用範囲 [#e45347e8]
変数は、定義された場所によって、使える場所(通用範囲)が...
*** ローカル変数 [#a21462f4]
ローカル(局所)変数とは、関数の中で定義された変数のこと...
int func(int x) {
int sum = 0;
for (int i=0; i<10; i++) {
int y = x + i;
sum = sum + y * y;
} y, i の通用範囲ここまで
// sum = sum + y * y; ←コンパイルエラーになる
// return i; ←コンパイルエラーになる
return sum;
} sum, x の通用範囲ここ...
int other(int y) {
// return x; ←コンパイルエラーになる
// return sum; ←コンパイルエラーになる
return y + 5;
}
sum という変数は、関数 func の中で定義してありますので、...
関数の仮引数は、その関数の内側のブロックで定義されたもの...
*** グローバル変数 [#df2c31e5]
グローバル(大域)変数とは、関数の外で定義された変数のこ...
int a = 0; // グローバル変数
void add2(void) { a = a + 2; }
void add5(void) { a = a + 5; }
int main() {
printf("%d\n", a); // 0
add2();
printf("%d\n", a); // 2
add5();
printf("%d\n", a); // 7
}
a という変数は関数の外側で定義されているので、main 関数で...
グローバル変数は、一見したところ便利なように思えます。関...
*** 変数名の重複 [#g22b9d8c]
変数名は、同じスコープ(ブロック)では重複できません。
void func(void) {
int a;
double a; // コンパイルエラー
}
スコープが異なると、変数名が重複してもよくなります。異な...
void func(void) { int x = 0; printf("%d", x); } // 0
void other(void) { int x = 5; printf("%d", x); } // 5
スコープが入れ子になっている場合は、内側のスコープの変数...
int a = 5; // グローバル変数
int func(void) {
printf("%d\n", a); // 5, グローバル変数
}
int other(void) {
int a = 10; // ローカル変数
printf("%d\n", a); // 10, ローカル変数
}
スコープの広いグローバル変数には、名前の重複を避けるため...
*** スコープは狭く [#i2e230ce]
グローバル変数を用いた、悪い例を示します。ループで用いる...
int i; // 定義を一度ですませたい
void func(void) { for (i=1; i<=3; i++) printf("%d ", i)...
void other(void) { for (i=1; i<=3; i++) func(); } // 1 2...
int main() {
other(); // 1 2 3
}
関数 other では3回ループを行い、関数 func を3回呼び出し...
以下のように改善すると、for ループごとに i を定義しなおし...
void func(void) { for (int i=1; i<=3; i++) printf("%d "...
void other(void) { for (int i=1; i<=3; i++) func(); } //...
int main() {
other(); // 1 2 3 1 2 3 1 2 3
}
ローカル変数であっても、スコープも狭くしておくとメリット...
int main() {
// int i; // ここで定義しているとエラーにならない
for (int i=0; i<10; i++) { /* iはこのブロック専用 */ }
for (int k=0; k<10; i++) { ... } // i は使えないので...
...
}
2つめのforループでは k++ とすべきところを i++ とタイプミ...
ページ名: