Функция typedef возвращает значение в C - PullRequest
1 голос
/ 04 января 2012

Пожалуйста, помогите мне понять, что делает этот typedef ??

typedef void (xyz) (void *data);
extern struct x* FUNCTION(xyz *ptr);

Вот мое понимание: в 1-й строке xyz - функция, возвращающая void и принимающая указатель void в качестве аргумента.Но я не могу интерпретировать 2-ю строку с таким пониманием.

Любой вклад является заметным.

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Существует внешняя функция с именем FUNCTION, которая принимает указатель на функцию xyz в качестве параметра и возвращает указатель на struct x.

0 голосов
/ 04 января 2012

Первая строка определяет xyz как тип функции, возвращающей void и принимающей один аргумент типа void*. На самом деле вы можете опустить имя data, так как оно ничего не делает.

Поскольку в C нет необработанных типов функций, которые вы можете объявить напрямую, вы можете использовать только указатели на xyz, так как у вас действительно есть xyz * ptr.

Чаще всего указатель указывается в typedef:

typedef void (*fptr)(void*);

void call(fptr f, void * arg) { f(arg); }

void some_function(void * data); // whatever

int main()
{
    void * p = malloc(8);
    call(some_function, p);
}

Во второй строке объявляется функция, которая принимает xyz* в качестве аргумента и возвращает указатель на struct x с внешней связью.

...