Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

typedef

6 views
Skip to first unread message

Valera Kolesnik

unread,
Dec 21, 2007, 4:51:10 AM12/21/07
to
Hello everybody.

вот как-то считал, что
typedef что-то там cap;
равносильно
#define cap что-то там;

однако страуструп цитатой

typedef void (*SIG_TYP)(int);
typedef void (*SIG_ARG_TYP)(int);
SIG_TYP signal(int, SIG_ARG_TYP);

убил меня наповал. я понял, что что-то я неправильно считал. может мне
кто-нибудь объяснить, где я запутался и как разворачивается третья строка
цитаты, или хотя бы подсказать, где можно найти объяснение?

Valera

Andrey Tarasevich

unread,
Jan 7, 2008, 8:54:28 PM1/7/08
to
Fri Dec 21 2007 12:51, Valera Kolesnik wrote to All:

VK> вот как-то считал, что
VK> typedef что-то там cap;
VK> равносильно
VK> #define cap что-то там;

Hе равносильно, разумеется.

VK> однако страуструп цитатой

VK> typedef void (*SIG_TYP)(int);
VK> typedef void (*SIG_ARG_TYP)(int);
VK> SIG_TYP signal(int, SIG_ARG_TYP);

VK> убил меня наповал. я понял, что что-то я неправильно считал. может мне
VK> кто-нибудь объяснить, где я запутался и как разворачивается третья строка
VK> цитаты, или хотя бы подсказать, где можно найти объяснение?

Да нет тут никакого особого объяснения. typedef заводит имя-псевдоним для
некоторого типа. Вот, собственно и все. После этого, в частности, все
квалификаторы, применяемые к этому имени-псевдониму, относятся ко всему типу.

Отличий от #define можно привести целый ворох. Hапример

typedef int* T;
#define D int*
...
T a, b; /* и 'a', и 'b' имеют тип 'int*' */
D c, d; /* 'c' есть 'int*', но 'd' - просто 'int' */

const T e; /* 'e' есть 'int* const' */
const D f; /* 'f' есть 'const int*' */

Твой пример выше раскручиваетися соответствующим образом. Только смысла в этом
мало, ибо станет совсем нечитаемо.

Подставим сначала 'SIG_ARG_TYP':

SIG_TYP signal(int, void (*)(int));

а затем 'SIG_TYP':

void (*signal(int, void (*)(int)))(int);

Вот и все.

Best regards, Андрей

0 new messages