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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- auto とローカルスコープ
- static 変数
- extern とグローバル変数
- register と const