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++) と
ループ文が書きやすくなります。
ディスカッション
コメント一覧
まだ、コメントがありません