Что означает этот typedef? - PullRequest
       5

Что означает этот typedef?

4 голосов
/ 17 февраля 2012

Я новичок в C, и этот typedef выглядит немного странно для меня. Может кто-нибудь объяснить, что он делает?

typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);

Он находится в заголовочном файле.

Ответы [ 5 ]

7 голосов
/ 17 февраля 2012

Вы можете использовать cdecl.org: http://cdecl.ridiculousfish.com/?q=void+%28*alpm_cb_log%29%28alpm_loglevel_t%2C+const+char+*%2C+va_list%29+

Он говорит:

объявлять alpm_cb_log как указатель на функцию (alpm_loglevel_t, указатель на const char, va_list), возвращая void

в данном случае это typedef, а не объявление.

4 голосов
/ 17 февраля 2012

Простой пример. Декларация:

typedef int myint.

Использование:

myint number = 7;

myint является синонимом int .

ваш пример

typedef void (*alpm_cb_log)(alpm_loglevel_t, const char *, va_list);

это указатель на функцию

(*alpm_cb_log)

Аргументы:

(alpm_loglevel_t, const char *, va_list)

и ничего не возвращает.

void 

Общее правило с использованием typedef - выписать объявление так, как будто вы объявляли переменные нужных вам типов

4 голосов
/ 17 февраля 2012

Он определяет alpm_cb_log как тип для указателя на функцию, которая принимает аргументы alpm_loglevel_t, const char *, va_list и возвращает void.

3 голосов
/ 17 февраля 2012

Они выглядят странно, если вы никогда не видели их раньше. Это typedef alpm_cb_log для указателя на функцию, возвращающую void, принимающую два или более аргумента: alpm_loglevel_t, const char * и список аргументов переменной.

2 голосов
/ 17 февраля 2012

создает alais alpm_cb_log, который является указателем на функцию, которая возвращает void и принимает три параметра.1. alpm_loglevel_t 2. const char *.3 Список аргументов Варайбале.

...