
可変長配列はどこでも使えるわけではありません。可変長配列が使えるのは、ブロックの中か関数引数/プロトタイプの中だけで、グローバル変数として宣言したり、struct や union の中のメンバとして宣言したりすることはできません。加えて、static や extern 付きの配列は、可変長配列にできません。
int x, y; int newbuf[x][y]; //ERROR! グローバル変数 int sum(int w, int h, int dat[w][h]) //OK 関数引数 { static int sum_w[w]; //ERROR! static 付きの変数 int sum_h[h]; //OK 通常変数 struct sumdata { int sum_wh[w][h]; //ERROR! struct の中では宣言できない } sdat; static int (*p_sum_h)[h] = sum_h; //OK static を使っているけどこれは OK ... } |
by seclan