0Pricing
C Academy · レッスン

auto とローカルスコープ

ブロックレベルの変数です。

「auto とローカルスコープ」はCoddyKit上の無料C Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C Academyコースには全4レッスンが含まれています。

スコープとは

スコープとは、名前を参照できるコードの範囲です。C言語では、ブロック内で宣言した変数は、そのブロック内でのみ参照できます。

#include <stdio.h>
int main(void) {
    int x = 5;
    printf("x = %d\n", x);
    return 0;
}

auto記憶域クラス

ローカル変数はデフォルトでautoになります。すべてのブロックスコープ変数に暗黙に適用されるため、このキーワードを明示的に書くことはほとんどありません。

#include <stdio.h>
int main(void) {
    auto int n = 42;
    printf("n = %d\n", n);
    return 0;
}

ブロックスコープ

波括弧の組は新しいブロックを作ります。その中で宣言された変数は、ブロックが終了すると使えなくなります。

#include <stdio.h>
int main(void) {
    {
        int inner = 10;
        printf("inner = %d\n", inner);
    }
    return 0;
}

自動変数の存続期間

auto変数はブロックに入ると作成され、ブロックを抜けると破棄されます。これが変数の存続期間です。

#include <stdio.h>
int main(void) {
    for (int i = 0; i < 2; i++) {
        int fresh = i * 10;
        printf("fresh = %d\n", fresh);
    }
    return 0;
}

シャドーイング

内側の変数は、同じ名前を持つ外側の変数をシャドーイングできます。そのブロック内では、内側の名前が優先されます。

#include <stdio.h>
int main(void) {
    int x = 1;
    {
        int x = 99;
        printf("inner x = %d\n", x);
    }
    printf("outer x = %d\n", x);
    return 0;
}

関数の引数もローカル変数

引数もローカル変数です。関数の実行中だけ存在します。

#include <stdio.h>
int square(int n) {
    return n * n;
}
int main(void) {
    printf("%d\n", square(6));
    return 0;
}

未初期化のローカル変数

auto変数は自動的に0で初期化されるわけではありません。代入前に読み取ると不定値になります。必ず初期化してください。

#include <stdio.h>
int main(void) {
    int x = 0;
    x = x + 5;
    printf("x = %d\n", x);
    return 0;
}

呼び出しごとのローカル変数

関数を呼び出すたびに、ローカル変数の新しいコピーが用意されます。

#include <stdio.h>
void greet(void) {
    int count = 1;
    printf("count = %d\n", count);
}
int main(void) {
    greet();
    greet();
    return 0;
}

ローカル変数の利点

ローカルスコープによって変数の範囲が限定されるため、プログラムの各部分が意図せず干渉するのを防げます。

#include <stdio.h>
int main(void) {
    int a = 3;
    {
        int b = 4;
        printf("a + b = %d\n", a + b);
    }
    return 0;
}

入れ子になったブロック

ブロックは入れ子にできます。内側のブロックから外側の変数は読み取れますが、外側のブロックから内側の変数は読み取れません。

#include <stdio.h>
int main(void) {
    int outer = 1;
    {
        int middle = 2;
        {
            int inner = 3;
            printf("%d\n", outer + middle + inner);
        }
    }
    return 0;
}

スコープとループ

forのヘッダーで宣言した変数のスコープは、そのループ内だけです。

#include <stdio.h>
int main(void) {
    int sum = 0;
    for (int i = 1; i <= 4; i++)
        sum += i;
    printf("sum = %d\n", sum);
    return 0;
}

理解度チェック

autoとローカルスコープについて理解できているか確認しましょう。

まとめ:autoとローカルスコープ

ローカル変数の動作を学びました。

  • ブロックスコープ変数はデフォルトでauto
  • 存続期間はブロックに対応する
  • 内側の名前は外側の名前をシャドーイングできる
  • ローカル変数は自動的には初期化されない
  • 関数を呼び出すたびに新しいローカル変数が用意される

よくある質問

「auto とローカルスコープ」レッスンは無料ですか?

はい。「auto とローカルスコープ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C Academyコースには全4レッスンが含まれています。

「auto とローカルスコープ」で何を学びますか?

ブロックレベルの変数です。 ブラウザで直接実行するハンズオンコードでC Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

C Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのC Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「auto とローカルスコープ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このC Academyレッスンでコードを書いて実行できますか?

はい。すべてのC Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. auto とローカルスコープ
  2. static 変数
  3. extern とグローバル変数
  4. register と const
← C Academyに戻る