C言語でmapみたいな

mapって何なんでしょ(知らない)

C言語で配列を初期化するのにループ回すのすごく虚無感があったのでなんとかならんかと適当に作った。思ったよりいいんちゃう?ってなったので久々にブログに書く。

こんな感じ。

#define MAP(func, Array) (mapping((func), (Array), sizeof((Array)), sizeof((Array)[0])))
void mapping (void (*func)(void *), void *Array, size_t arraySize, size_t compSize)
{
    int i;
    int size = arraySize / compSize;
    for (i = 0; i < size; i++) {
        func(Array);
        Array += compSize;
    }
}

使い方は

void zero (void *i)
{
    *(long long *)i *= 0;
}
int main (void)
{
    ...
    long long A[5];
    MAP(zero, A);
    ...
    return 0;
}

って感じ。

表示も同様に

void print (void *i)
{
    printf("%lld\n", *(long long *)i);
}
int main (void)
{
    ...
    long long A[5];
    MAP(print, A);
    ...
    return 0;
}

としたらまあできたけど、違う型の配列も使ってるときに使いまわせないなーって残念な感じ。
型の情報を引数に渡せたりとかできるんでしょうかね。