C言語のスコープ
C言語のスコープについて解説します。
ローカル変数のスコープ
まずローカル変数のスコープについてです。ローカル変数のスコープは、関数の内部で定義されます。
ブロックはローカル変数のスコープを作る
ローカル変数のスコープはブロックによって作られます。ブロックは関数内部で使われた「{」と「}」で閉じられた部分と考えてください。
// 関数のブロックはスコープを作る
void foo(void) {
// if分のブロックはスコープを作る
if (1) {
}
// while文のブロックはスコープを作る
for (条件) {
}
// while文のブロックはスコープを作る
while (1) {
}
// switch文のブロックはスコープを作る
switch (条件) {
case 1:
break;
case 2:
break;
}
// ブロックだけもOK
{
1;
}
}
ローカル変数の見え方
ローカル変数は、スコープごとに定義できます。自分のスコープにローカル変数が見つからない場合は、一つ上のスコープのローカル変数を探しに行きます。以下、繰り返し。ローカル変数が見つからない場合は、ファイルスコープを持つグローバル変数、それも見つからない場合は、グローバル変数を探しに行きますが、これは、後ほど解説します。
#include <stdio.h>
#include <stdint.h>
int main(void) {
int32_t num1 = 11;
int32_t num2 = 12;
int32_t num3 = 13;
printf("[SCOPE1]num1: %d, num2: %d, num3 :%d\n", num1, num2, num3);
if (1) {
int32_t num1 = 21;
int32_t num2 = 22;
printf("[SCOPE2]num1: %d, num2: %d, num3 :%d\n", num1, num2, num3);
{
int32_t num1 = 31;
printf("[SCOPE3]num1: %d, num2: %d, num3 :%d\n", num1, num2, num3);
}
}
}
出力結果です。どこで宣言された変数が見えているか、よく見てみましょう。
[SCOPE1]num1: 11, num2: 12, num3 :13 [SCOPE2]num1: 21, num2: 22, num3 :13 [SCOPE3]num1: 31, num2: 22, num3 :13
C言語ゼミ


