可変長配列はどこでも使えるわけではありません。可変長配列が使えるのは、ブロックの中か関数引数/プロトタイプの中だけで、グローバル変数として宣言したり、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