「自動変数の配列は初期化できません」の意味が分かりません
C言語入門 (ASCII SOFTWARE SCIENCE Language)に
基本データ型の初期化については第3章で説明しました。配列も初期化できますが、記憶クラスが外部変数か静的変数の配列に限定されます。自動変数の配列は初期化できません。配列の初期化は、以下のように行います。
static int room[6] = {3, 2, 0, 2, 1, 4};
と書かれていました。
この、「自動変数の配列は初期化できません」が良く分かりません。
最初は、「自動変数として配列を宣言した場合は初期化できない」という事なのかと思ったのですが、
以下のコードで考えてみると、それは違うようです。
#include <stdio.h>
void tekitou(void);
int main(void)
{
tekitou();
tekitou();
return 0;
}
void tekitou(void)
{
// auto int room[]={3,2,0,2,1,4};
static int room[]={3,2,0,2,1,4};
// int room[]={3,2,0,2,1,4};
for (int i=0;i<sizeof(room)/sizeof(int);i++)
{
printf("%d ",room[i]);
}
room[0]=100;
printf("\n%d\n",room[0]);
}
配列の宣言がstaticの場合は出力が
3 2 0 2 1 4
100
100 2 0 2 1 4
100
となり、autoか何も付けない場合は
3 2 0 2 1 4
100
3 2 0 2 1 4
100
となり、静的変数の場合とは挙動が異なり、
ちゃんと自動変数として配列が初期化できているように思えます。
この「自動変数の配列は初期化できません」というのは、どういう意味なのでしょうか?
(単純に本が古いから、現在は仕様が変わったという事かもしれません)