Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のauto(自動)ストレージクラスとは?仕組みと使い方を解説

C言語には、変数の記憶域期間やスコープを制御するためのストレージクラス(記憶クラス)が4種類用意されています。

  • auto(自動)
  • extern(外部)
  • static(静的)
  • register(レジスタ)

本記事では、この中でも基本となるauto(自動)ストレージクラスについて、その特徴やスコープ、具体的なコード例を交えて詳しく解説します。

自動変数(ローカル変数)とは

autoストレージクラスで宣言される変数は「自動変数」と呼ばれ、一般的には「ローカル変数(局所変数)」として知られています。キーワードは auto です。

スコープと特徴

  • 宣言されたブロック(波括弧 { } の内側)の中でのみ有効です。
  • ブロックの外からはアクセスできません。
  • 初期化しない場合、デフォルト値は不定値(ガーベジ値)になります。

動作の流れ(アルゴリズム)

START
Step 1: auto int i=1 を宣言・初期化
  I. auto int i=2 を宣言・初期化
    I. auto int i=3 を宣言・初期化
    II. i の値を出力 // 3
  II. i の値を出力 // 2
Step 2: i の値を出力 // 1
STOP

サンプルプログラム1:ネストしたブロックでのスコープ確認

以下は、autoストレージクラスを使ったC言語プログラムの例です。入れ子になったブロックごとに同じ名前の変数を宣言すると、それぞれ独立した変数として扱われることがわかります。

#include<stdio.h>
main ( ){
    auto int i=1;{
        auto int i=2;{
            auto int i=3;
            printf ("%d",i);
        }
        printf("%d", i);
    }
    printf("%d", i);
}

実行結果

3 2 1

最も内側のブロックで宣言された i=3 が最初に出力され、その後、外側のブロックへと戻りながら 21 と出力されます。これは、各ブロックのauto変数がそれぞれ独立して存在していることを示しています。

サンプルプログラム2:関数内でのauto変数の利用

次に、関数内でauto変数を使用する実践的な例を見てみましょう。

#include<stdio.h>
int mul(int num1, int num2){
    auto int result; // auto変数の宣言
    result = num1*num2;
    return result;
}
int main(){
    int p,q,r;
    printf("enter p,q values:");
    scanf("%d%d",&p,&q);
    r = mul(p, q);
    printf("multiplication is : %d\n", r);
    return 0;
}

実行結果

Run 1: enter p,q values:3 5
multiplication is : 15
Run 2: enter p,q values:6 8
multiplication is : 48

関数 mul() 内で宣言された result はauto変数のため、関数の呼び出しが終わると同時にメモリ上から解放されます。このように、auto変数は必要なときだけ確保され、ブロックを抜けると自動的に破棄されるという特徴があります。

まとめ

  • autoはC言語におけるデフォルトのストレージクラスであり、通常は明示的に書かなくてもローカル変数は自動的にautoとして扱われます。
  • スコープは宣言されたブロック内に限定されます。
  • 初期化しない場合は不定値となるため、必ず初期化してから使用しましょう。
  1. クラウドストレージとは?仕組み・バックアップとの違い・選び方を徹底解説

    クラウドストレージとは、ファイルをインターネット上(クラウド)に保存する仕組みのことです。パソコンの内蔵HDDや外付けハードディスク、USBメモリにデータを保管する代わりに、オンライン上にファイルを置いておくことができます。クラウドストレージを利用する理由はさまざまです。ローカルディスクの空き容量が不足している場合、クラウドを追加の保存先として活用できます。音楽コレクションをどこからでもストリーミング再生したい、自宅から仕事のファイルにアクセスしたい、旅行の動画を手軽に共有したい——そんなニーズにも応えられます。さらに、重要なファイルをパスワードと暗号化でしっかり保護したいという場合にも有効で

  2. C++の記憶クラス(ストレージクラス)とは?auto・static・externなどの5種類を解説

    C++プログラミングにおいて、記憶クラス(ストレージクラス)とは、変数や関数のスコープ(可視性)と寿命(ライフタイム)を定義するための指定子です。記憶クラス指定子は、修飾対象となる型の前に記述します。C++プログラムで使用できる記憶クラスには、以下の5種類があります。 auto register static extern mutable auto:自動記憶域期間 auto記憶クラス指定子は、自動記憶域を持つ変数を明示的に宣言するためのものです。ブロック内で宣言された変数のデフォルトはautoであり、自動記憶域を持つ変数xは、xが宣言されたブロックを抜けると破棄されます。 auto指定子は