この回答によると、次のように述べています。
コンパイラは int 型のサイズを認識しているため、適切なアセンブラ命令を生成して、スタック上に foo が存在できるように十分なスペースを確保できます。
コンパイラは、関数を実装するために、関数がスタック上で占有するサイズを知る必要があります。
では、なぜこのコードはコンパイルされるのでしょうか?
int f(int n)
{
int x[n];
}
int main()
{
f(3);
f(5);
//etc
}
x
は整数の配列ですが、そのサイズは一定ではなく、関数が呼び出されるたびに変化する可能性があります。
ここで何が欠けていますか?