Что означают эти функции typedefs? - PullRequest
2 голосов
/ 27 ноября 2011

Я пытаюсь понять, что означают следующие определения типов. Они являются указателями на функции?

typedef int Myfunc(char *);

static Myfunc myfunc;

int myfunc(char *string)
{
    printf("%s\n", string);
    return 0;
}

Я знаю typedef int Myfunc(char *) означает, что func Myfunc возвращает целое число, и все, хорошо? И я подумал, следующее утверждение, как можно назвать myfunc? Так должно быть static Myfunc *myfunc, значит указатель на функцию, не так ли?

Ответы [ 4 ]

3 голосов
/ 27 ноября 2011

Вторая строка - это объявление функции, а не указатель на функцию. Функция имеет тип MyFunc, называется myfunc и имеет статическую связь : это означает, что функция недоступна для других исходных файлов, скомпилированных в тот же объект.

1 голос
/ 27 ноября 2011

Для вызова myfunc то же самое, что и вызов функции:

myfunc("a-string");
1 голос
/ 27 ноября 2011

Подпись для myfunc: typedef int (*MyFunc)(char *); Затем вы можете объявить переменную типа MyFunc, т.е.

static MyFunc func_ptr;

Затем вы можете назначить функцию, соответствующую сигнатуре, этой переменной.

0 голосов
/ 27 ноября 2011

Я не уверен, что это правильный код.

typedef int (*Myfunc)(char *);

объявляет тип Myfunc, который является указателем на функцию, которая принимает char * и возвращает int.

Невозможно переслать объявление функции с typedef. Опустите static Myfunc myfunc; и вместо этого начните определение вашей функции с

static int myfunc(char *string) {
...