C 言語 | 構造体の宣言 | 自動変数 - auto

auto キーワードを使うと、宣言したブロック内だけで有効な自動変数であることを明示できる。ブロック内で宣言した変数は標準で自動変数になるため、現代の C 言語で auto を使う実用的な意味はほとんどない。

ローカルな寿命を持つ変数

C 言語の変数宣言では、変数の寿命を明示する記憶クラス指定子を使える。typedef も厳密には記憶クラス指定子の一種だが、特殊なものだといえる。通常の記憶クラスは、変数がいつメモリーから解放されるかを決める。

記憶クラス指定子

記憶クラス指定子 型 変数 ...

1 つの宣言に複数の記憶クラス指定子を組み合わせることはできない。

関数本体などのブロック内で宣言した変数を自動変数と呼ぶ。自動変数はそのブロック内だけで有効であり、制御がブロックに入ったときに初期化され、ブロックから出ると解放される。ブロック内で宣言した変数は、コンパイラーが自動変数として扱う。

auto を使うと、自動変数であることを明示できる。ただし実用上の利点がないため、通常は省略する。

auto 記憶クラス指定子

auto 型 変数名 ...

auto の意味は C 言語と C++ で異なる。C++11 では auto は型推論を表す。C 言語における意味で auto を使ったコードを C++ としてコンパイルすると、エラーになる場合がある。

コード 1

#include <stdio.h>

int main() {
 auto char *str = "Kitty on your lap";
 printf("%s\n" , str);
  return 0;
}

コード 1 の str は、auto 記憶クラス指定子を使って自動変数であることを明示している。ただし、auto を省略しても結果は変わらない。関数内で宣言した変数は標準で自動変数になる。