c言語で配列の要素数を取得するマクロ
c言語で配列の要素数を取得する関数は作れないと思っていたが、
関数じゃなくてマクロにしたら実装できたっぽい。
これで配列の先頭アドレスを渡す各種関数に配列のサイズを渡さなくて済みそう。
配列の要素数をその都度計算する分、引数で渡すのに比べて
パフォーマンスは低下するけれど気にするほどのことではない。
GET_ARRAY_LENGTHというマクロ
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <stdio.h> #include <limits.h> #define GET_ARRAY_LENGTH(a) (sizeof(a)/sizeof(a[0])) int main(){ int arr_int[] = {INT_MAX, 0, -(INT_MAX-1)}; printf("arr_int length : %ld\n", GET_ARRAY_LENGTH(arr_int)); char *arr_str[] = {"a", "あいう", "あ0いうbc", "", "\0"}; printf("arr_str length : %ld\n", GET_ARRAY_LENGTH(arr_str)); } |
このマクロ関数の仮引数に使っちゃだめだ orz