Это указатель на функцию, принимающую два аргумента-указателя и возвращающую int
. Судя по названию, семантика функции заключается в том, что она сравнивает два указанных объекта и возвращает значение <0, 0 или> 0, указывающее относительный порядок двух объектов в соответствии с некоторыми критериями упорядочения.
Назначение такого параметра - разрешить функции (set_maker()
в данном случае) работать с объектами произвольного типа и правил упорядочивания. Например, если вы работали с объектами int
, у вас могла бы быть функция:
int icompare(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
Затем вы могли бы вызвать set_maker()
таким образом:
set_maker( istack, icompare ) ;
, чтобы set_maker()
может работать на LINKEDSTACK
из int
с. (Я делаю здесь несколько аргументированное предположение, поскольку вы не предоставили подробностей о set_maker()
или LINKEDSTACK
).
Точно так же функция сравнения может работать с struct
объектами с более сложными правилами сравнения, включающими несколько члены. Таким образом, его цель - сделать set_maker()
достаточно гибким для обработки любого типа данных без дублирования большого количества кода, предоставив правила для обработки каждого типа данных в предоставленной функции.
Пример стандартной библиотеки такого типа функция qsort () , хотя вы заметите, что параметры имеют тип const void*
, что является наилучшей практикой для функций, которые не предназначены для изменения объектов, на которые есть ссылки.