6

GCCでコンパイル時に配列の長さを返すことができるマクロまたはビルトインはありますか?

例えば:

int array[10];

そのために:

sizeof(array) == 40
???(array) == 10

Update0

これをC++で行うのは簡単だと指摘するかもしれません。内の数値を返すテンプレートを作成できます[]lengthofVisual C ++コンパイラでマクロ/ビルトインを見つけたことがあると確信していましたがdimof、もう見つかりません。

4

4 に答える 4

14
(sizeof(array)/sizeof(array[0]))

またはマクロとして

#define ARRAY_SIZE(foo) (sizeof(foo)/sizeof(foo[0]))

    int array[10];
    printf("%d %d\n", sizeof(array), ARRAY_SIZE(array));

40 10

注意:このARRAY_SIZE()マクロを配列へのポインターに適用すると、コンパイラーの警告やエラーなしでガベージ値を取得できます。

于 2010-08-02T14:27:31.443 に答える
2

aligmentのものが物事を台無しにする可能性があるので、私はsizeofに依存しません。

#define COUNT 10
int array[COUNT];

そして、あなたはあなたが望むようにCOUNTを使うことができます。

于 2010-08-02T14:31:13.337 に答える
1
    sizeof(配列)/ sizeof(int)
于 2010-08-02T14:27:26.280 に答える
1

私はこれを行うビルトインに気づいていませんが、私は最近使用しました:

sizeof(array)/ sizeof(array [0])

まさにそれをするために

于 2010-08-02T14:28:39.290 に答える