В чем разница между этими двумя объявлениями в c? - PullRequest
4 голосов
/ 11 ноября 2010
typedef int (*P)(char *(*)());

int (*P)(char *(*)());

Оба, кажется, делают одно и то же для меня, для чего там typedef?

Ответы [ 3 ]

9 голосов
/ 11 ноября 2010

Первый объявляет тип с именем P, который можно использовать при объявлении других переменных.Вторая объявляет переменную того же типа.

Для иллюстрации:

typedef int (*P)(char *(*)());

int main() {
    int (*Q)(char *(*)());
    P R;
}

В этом примере переменные Q и R имеют в точноститого же типа.

4 голосов
/ 11 ноября 2010

typedef определяет P как указатель на функцию type . Вторая версия определяет P как указатель на функцию.

Тип может использоваться для объявления переменных. После

typedef int (*P)(char *(*)());

вы можете использовать

P p;

, что будет эквивалентно

int (*p)(char *(*)());
1 голос
/ 11 ноября 2010

Ответ прост: вы создаете новый тип данных с помощью typedef.

Давайте рассмотрим простой пример: во встроенной системе мы используем только числа без знака.Теперь 1 способ - я пишу

unsigned int xyz;

Так что здесь я должен был бы везде печатать unsigned .. Что, если я забуду где-нибудь напечатать unsigned, очень трудно понять, что если код будет выпущен.Таким простым способом будет

typedef unsigned int uint;

Так что теперь вы можете использовать uint в качестве типа данных.Поэтому, когда парсер встречает uint, он читает его как беззнаковое целое.

Так что в вашем случае вы можете использовать P в качестве типа данных в коде.Как и в первом примере,

P xyz ; 

будет проанализирован как

int (*xyz)(char *(*)());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...