Мне просто интересно, есть ли способ передать дополнительный параметр моему компаратору, который затем будет использоваться в моей функции qsort?
Например, у меня есть эти 2 компаратора (один в порядке возрастания и один по убыванию)
qsort(entries, 3, sizeof(struct entry), compare_desc);
int compare_asc(const void *elem1, const void *elem2)
{
return strcmp(elem1.name.last, elem2.name.last);
}
int compare_desc(const void *elem1, const void *elem2)
{
return strcmp(elem2.name.last, elem1.name.last);
}
Есть ли способ, чтобы я мог сделать что-то вроде этого:
int compare(const void *elem1, const void *elem2, const char *order)
{
if (strcmp(order, "asc") == 0)
return strcmp(elem1.name.last, elem2.name.last);
else if (strcmp(order, "desc") == 0)
return strcmp(elem2.name.last, elem1.name.last);
}
Причина, о которой я прошу, заключается в том, что моя программа сортировки должна принимать переключатели, и если у меня есть 2 разных переключателя (+ a, -a) для восходящего и нисходящего соответственно, тогда я должен сделать 2 разных функции компаратора. Если я добавлю больше, это усложнится. Есть ли способ улучшить дизайн этой программы?
EDIT: глобальных и внешних переменных не разрешено.