autoとは
エンジニアくん今回は auto。正直、ほぼ“書かないやつ”



え、じゃあなんで存在してるんですか…?
auto は、変数が自動記憶域(ローカル変数)に配置されることを示すキーワードです。
void func(void)
{
auto int x = 10;
}ただし、この auto は省略可能であり、通常は書きません。
void func(void)
{
int x = 10; /* これも auto と同じ意味 */
}つまり、関数内で宣言された変数はデフォルトで auto になるため、明示的に書く必要がないのです。
C言語文法解説シリーズ
本記事は「C言語文法解説シリーズ」の1つです。
C言語の文法を、組み込み開発の視点も交えて解説しています。
C言語文法解説シリーズ一覧はこちら


autoの意味(記憶域の観点)
エンジニアくん「ここ、ちゃんと理解しておくと static との違いが分かる」
auto は「自動記憶域(automatic storage)」を意味します。
具体的には以下の特徴があります。
- 関数が呼ばれると生成される
- 関数を抜けると破棄される
- スタック領域に配置される(一般的には)
void func(void)
{
int x = 10; /* auto変数 */
}この x は関数の実行中だけ存在し、関数終了とともに消えます。
なぜautoは書かれないのか
結論:デフォルトだからです。
C言語では、関数内で宣言された変数はすべて auto 扱いになります。
int x = 10; /* ← これで既に auto */そのため、わざわざ
auto int x = 10;と書く意味がありません。



書いても間違いではないけど、“書く理由がない”
autoとstaticの違い
staticとの違いも重要です。
| 種類 | lifetime(寿命) | 初期化 | 値の保持 |
|---|---|---|---|
| auto | 関数内のみ | 毎回初期化 | されない |
| static | プログラム全体 | 1回のみ | される |
void func(void)
{
int x = 0; /* auto */
static int y = 0; /* static */
x++;
y++;
printf("%d %d\n", x, y);
}この関数を複数回呼ぶと:
xは毎回 1yは増え続ける
👉 これが auto と static の本質的な違いです。
staticについてはこちらの記事でも解説しています。


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



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



全く違う。ここめっちゃ大事
C言語の auto と、C++や他言語の auto は別物です。
| 言語 | autoの意味 |
|---|---|
| C言語 | 記憶域(ローカル変数) |
| C++ | 型推論 |
例えばC++では:
auto x = 10; // 型を自動推論(intになる)しかし、C言語ではこのような使い方はできません。
👉 C言語の auto は「型推論」ではない点に注意しましょう。
autoは使うべき?
結論:基本的に使いません。
- 書かなくても同じ意味になる
- 可読性が上がるわけでもない
- 実務で見かけることはほぼない
そのため、auto は
👉 「デフォルト動作を明示するだけのキーワード」
👉 「知識として知っておくもの」
という位置づけになります。
autoのまとめ
auto は、変数が自動記憶域(ローカル変数)であることを示すキーワードです。
ただし、C言語では関数内の変数はデフォルトで auto になるため、明示的に書く必要はありません。
また、C++の auto(型推論)とは意味が全く異なる点に注意が必要です。
現代のC言語では、auto はほとんど使われないキーワードですが、
ストレージクラスの理解のために知っておくべき文法といえるでしょう。
この記事が参考になった方へ
関数を含むC言語の基本文法をこちらの記事で整理しています。


技術に関するご相談・開発・自動化ツール作成・記事執筆などのご依頼も承っています。
小さなご相談からでもお気軽にご連絡ください。









コメント