Podstawowa składnia operandu typedef
Podane:
typedef type-declaration synonym;
Widzę jak:
typedef long unsigned int size_t;
Deklaruje size_t
jako synonim long unsigned int
, jednak (Wiem, że tak, ale) nie widzę dokładnie Jak:
typedef int (*F)(size_t, size_t);
Deklaruje F
jako synonim pointer to function (size_t, size_t) returning int
Dwa operandy Typedefa (type-declaration, synonym)
w pierwszym przykładzie to long unsigned int
i size_t
.
Jakie są dwa argumenty do typedef w deklaracji F
lub są może przeciążone wersje typedef?
Jeśli istnieje istotne rozróżnienie między C A C++ proszę o rozwinięcie inaczej interesuje mnie przede wszystkim C++ jeśli to pomoże.
5 answers
Deklaracje typu używając typedef
są takie same jak odpowiadające im deklaracje zmiennych, tylko z typedef
poprzedzone. Więc
int x; // declares a variable named 'x' of type 'int'
typedef int x; // declares a type named 'x' that is 'int'
Jest dokładnie tak samo z typami wskaźników funkcji:
int(*F)(size_t); // declares a variable named F of type 'int(*)(size_t)'
typedef int(*F)(size_t); // declares a type named 'F' that is 'int(*)(size_t)'
To nie jest "przypadek szczególny"; tak właśnie wygląda typ wskaźnika funkcji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-23 23:58:36
To nie jest formalna składnia typedef, to tylko jeden z wzorców, które może przyjąć. W standardzie C 6.7.1, typedef
jest zdefiniowany składniowo jako specyfikator klasy storage (jak extern
lub static
). Modyfikuje deklarację, tak że deklaracja deklaruje Alias typu zamiast obiektu.
typedef
nie jest ani funkcją, ani operatorem, więc pojęcia "argument", "operand" lub "przeciążenie" nie mają do niej zastosowania. Po prostu mówi kompilatorowi, jakiego rodzaju deklaracją jesteś Robienie.
W C++, typedef
jest składniowo zdefiniowany jakoDecl-specifier , nie jest tostorage-class-specifier . storage-class-specifiiers są również Decl-specifiiers, podobnie jak friend
. Nie sądzę, aby to miało jakąś praktyczną różnicę, to inny sposób na powiedzenie tego samego, co mówi C, ale jest to 7.1 standardu C++, jeśli chcesz sam spojrzeć. Przyznaję, że na razie mnie to dziwi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-23 23:02:11
Twoje początkowe założenie o składni typedef posiadającej
typedef type-declaration synonym;
Struktura jest absolutnie Niepoprawna. Składnia Typedef nie ma takiej struktury i nigdy nie miała.
Składnia Typedef jest składnią zwykłej deklaracji, tak jak każda inna deklaracja w języku C. Słowo kluczowe typedef
jest po prostu specyfikatorem deklaracji, który wskazuje, że zadeklarowana nazwa jest nazwą typedef, a nie zmienną, oznacznikiem funkcji lub czymś innym.
Możesz użyć wielu deklaratorów w ta sama deklaracja typedef, na przykład
typedef int TInt, *TIntPtr, (*TIntFuncPtr)(void), TIntArr10[10];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-23 23:04:40
Zamiast myśleć o typedef
jako operacji, która przyjmuje dwa parametry (typ i synonim), pomyśl o niej jako o kwalifikatorze typu. Aby zadeklarować zmienną o nazwie F
, która była wskaźnikiem funkcji przyjmującym dwa parametry size_t
i zwracającym int
, wystarczy:
int (*F)(size_t, size_t);
Dodaj kwalifikator type typedef
i zamiast deklarować zmienną, zadeklarowałeś alias type.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-23 22:48:20
typedef
używa składni deklaracji.
Wskaźnik funkcji typedef
jest taki sam jak używany do deklarowania wskaźnika funkcji. Z wyjątkiem tego, że deklarujesz typ, a nie zmienną.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-23 22:46:05