C言語のautoとは?意味・省略される理由・他言語との違いを解説

目次

autoとは

エンジニアくん

今回は auto。正直、ほぼ“書かないやつ”

初心者さん

え、じゃあなんで存在してるんですか…?

auto は、変数が自動記憶域(ローカル変数)に配置されることを示すキーワードです。

C
void func(void)
{
    auto int x = 10;
}

ただし、この auto は省略可能であり、通常は書きません。

C
void func(void)
{
    int x = 10;  /* これも auto と同じ意味 */
}

つまり、関数内で宣言された変数はデフォルトで auto になるため、明示的に書く必要がないのです。


C言語文法解説シリーズ

本記事は「C言語文法解説シリーズ」の1つです。
C言語の文法を、組み込み開発の視点も交えて解説しています。

C言語文法解説シリーズ一覧はこちら

autoの意味(記憶域の観点)

エンジニアくん「ここ、ちゃんと理解しておくと static との違いが分かる」

auto は「自動記憶域(automatic storage)」を意味します。

具体的には以下の特徴があります。

  • 関数が呼ばれると生成される
  • 関数を抜けると破棄される
  • スタック領域に配置される(一般的には)
C
void func(void)
{
    int x = 10;  /* auto変数 */
}

この x は関数の実行中だけ存在し、関数終了とともに消えます。


なぜautoは書かれないのか

結論:デフォルトだからです。

C言語では、関数内で宣言された変数はすべて auto 扱いになります。

C
int x = 10;  /* ← これで既に auto */

そのため、わざわざ

C
auto int x = 10;

と書く意味がありません。

エンジニアくん

書いても間違いではないけど、“書く理由がない”


autoとstaticの違い

staticとの違いも重要です。

種類lifetime(寿命)初期化値の保持
auto関数内のみ毎回初期化されない
staticプログラム全体1回のみされる
C
void func(void)
{
    int x = 0;         /* auto */
    static int y = 0;  /* static */    
    
    x++;
    y++;    
    printf("%d %d\n", x, y);
}

この関数を複数回呼ぶと:

  • x は毎回 1
  • y は増え続ける

👉 これが autostatic の本質的な違いです。

staticについてはこちらの記事でも解説しています。


他言語のautoとの違い(重要)

初心者さん

C++とかの auto とは違うんですか?

エンジニアくん

全く違う。ここめっちゃ大事

C言語の auto と、C++や他言語の auto別物です。

言語autoの意味
C言語記憶域(ローカル変数)
C++型推論

例えばC++では:

C
auto x = 10;  // 型を自動推論(intになる)

しかし、C言語ではこのような使い方はできません。

👉 C言語の auto は「型推論」ではない点に注意しましょう。


autoは使うべき?

結論:基本的に使いません。

  • 書かなくても同じ意味になる
  • 可読性が上がるわけでもない
  • 実務で見かけることはほぼない

そのため、auto

👉 「デフォルト動作を明示するだけのキーワード」
👉 「知識として知っておくもの」

という位置づけになります。


autoのまとめ

auto は、変数が自動記憶域(ローカル変数)であることを示すキーワードです。

ただし、C言語では関数内の変数はデフォルトで auto になるため、明示的に書く必要はありません。

また、C++の auto(型推論)とは意味が全く異なる点に注意が必要です。

現代のC言語では、auto はほとんど使われないキーワードですが、
ストレージクラスの理解のために知っておくべき文法といえるでしょう。

この記事が参考になった方へ

関数を含むC言語の基本文法をこちらの記事で整理しています。

技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。

小さなご相談からでもお気軽にご連絡ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

組み込みソフトエンジニアとして働きながら、
C言語・メモリ・ポインタなどの基礎から実務まで解説しています。

副業・キャリアについても実体験ベースで発信中です。

X(旧Twitter)でも発信しています
👉 Xはこちら

▼まずはここから読むのがおすすめ
C言語文法シリーズ
メモリ領域解説シリーズ

コメント

コメントする


目次