$ cat foo.c #include #include int compare_int(const void *a, const void *b) { return *(int *)a - *(int *)b; } int compare_double(const void *a, const void* b) { return *(double *)a - *(double *)b; } int a1[] = { 1, 100, 5, 50, 25 }; double a2[] = { 1.0, 10.0, 5.0, 25.0 }; int (*cmp_fn)(const void *, const void *); #define CFG_ADD(TYPE) cmp_fn = compare_ ## TYPE; int main(int argc, char **argv) { CFG_ADD(int); qsort(a1, sizeof(a1)/sizeof(a1[0]), sizeof(a1[0]), cmp_fn); for (int i=0; i