C/C++でマクロ処理を使って配列数を取得しよう

通常、vectorなどのItelatorを使っている人は、何を言っているんだ?という風に思うかもしれません。
私も配列数が欲しい場合は、クラス内にGetSize()等のメソッドを持たせますが、これがPure Cの場合は
クラスを作成する事ができません。

それではどうするか?
その場合、sizeof()を使います。
sizeof()はその変数のバイトサイズを返してくれます。

int a[10];
この場合は int 型が10配列あるので、40バイトが帰ってきます。
int rslt = sizeof(a); //この場合、rsltは40が格納されます。

では、10という配列数が欲しい場合はどうするのでしょうか?
intが4バイトなので4で割る。 (sizeof(a) / 4.0f)となります。

では、これがstructureだったりする時はどうなるか。

単体のサイズを取得すればよくなります。

(sizeof(k) / sizeof(k[0]))

配列数はセットだと言ってもよいほどループ処理で使いますので
毎回、このようなコードを書くのは面倒になってきます。

そこで、マクロ処理を使用します。

#define ArrayOf(_arrVal) (sizeof(_arrVal) / sizeof(_arrVal[0]))
これをヘッダなどに置いておくことで、 for(int i = 0;i < ArrayOf(k);i++) と
ループ文が書きやすくなります。