qsortのような同様の「汎用」プロシージャがあります。これには、voidポインタ(配列を指す)と関数ポインタパラメータがあります。この関数は、どのタイプの配列でも機能するはずです。
例:
void do_something(void * array, int count, int size, void (*test)(const void*)){
int i;
for(i=0; i<count; i++){
test(array + (index * size));
}
}
ただし、これにより次の警告が表示されます (gcc test.c -pedantic-errors):
error: pointer of type ‘void *’ used in arithmetic [-Wpedantic]
そして、いくつかの調査の結果、このような void ポインターを使用するのは悪い習慣であることがわかりました。(例: C の void ポインターのポインター演算)
では、標準ライブラリは qsort のようなものをどのように処理するのでしょうか? このコード ( http://aturing.umcs.maine.edu/~sudarshan.chawathe/200801/capstone/n/qsort.c ) を見ると、次のようになります。
void
_quicksort (void *const pbase, size_t total_elems, size_t size,
__compar_fn_t cmp)
{
register char *base_ptr = (char *) pbase;
....
char *lo = base_ptr;
char *hi = &lo[size * (total_elems - 1)];
...
}
実際の型に関係なく (char *) にキャストしていますか?