Передача указателя функции typedef в качестве проблемы аргумента - PullRequest
0 голосов
/ 11 декабря 2018

Я просто не мог понять, как указатели на функции typedef передаются в функцию «uniqueOrderedListCreate» ниже, что я знаю, когда мы объявляем typedef указателя функции, нам нужно добавить параметр при передаче в качестве аргумента, например:

UniqueOrderedList uniqueOrderedListCreate(copyElements a, freeElements b, 
elementsEquals c, elementGreaterThan d);

Есть что-то, что я здесь неправильно понял?

#ifndef UNIQUEORDEREDLIST_H_
#define UNIQUEORDEREDLIST_H_
#include <stdbool.h>


typedef struct uniqueOrderedList_t* UniqueOrderedList;

typedef void* Element;

typedef Element (*copyElements)(Element);

typedef void (*freeElements)(Element);

typedef bool (*elementsEquals)(Element, Element);

typedef bool (*elementGreaterThan)(Element e1, Element e2);


UniqueOrderedList uniqueOrderedListCreate(copyElements, freeElements, 
elementsEquals, elementGreaterThan);

1 Ответ

0 голосов
/ 11 декабря 2018

Нет необходимости указывать имена параметров функции в объявлениях функций .

UniqueOrderedList uniqueOrderedListCreate(copyElements, freeElements,
    elementsEquals, elementGreaterThan);

Это просто объявляет функцию с именем uniqueOrderedListCreate, которая принимает четыре безымянных параметра указанных типов ивозвращает UniqueOrderedList.Если дано определение функции, параметрам должны быть присвоены имена:

UniqueOrderedList uniqueOrderedListCreate(copyElements a, freeElements b,
    elementsEquals c, elementGreaterThan d)
{
    /* ... */
}

Также не требуется, чтобы имена, указанные в объявлении, соответствовали именам, указанным в определении.Только сигнатура функции (возвращаемый тип и типы параметров) должна совпадать.

...