Udostępnij za pośrednictwem


Specyfikatory typu C

Specyfikatory typów w deklaracjach definiują typ deklaracji zmiennej lub funkcji.

Składnia

type-specifier: voidcharshortintlongfloatdoublesignedunsignedstruct-or-union-specifierenum-specifiertypedef-name

Typy signed char, signed int, , signed short inti podpisanych długich int wraz z ich unsigned odpowiednikami i enum, są nazywane typami całkowitolicztowymi . floatSpecyfikatory typu , doublei long double są określane jako typy zmiennoprzecinkowe lub zmiennoprzecinkowe. W deklaracji zmiennej lub funkcji można użyć dowolnego specyfikatora typu całkowitego lub zmiennoprzecinkowego. Pierwotnie, jeśli element type-specifier nie został podany w deklaracji, został przewieziony do int. Kompilator firmy Microsoft nie akceptuje już deklaracji domyślnych int .

Opcjonalne słowa kluczowe signed i unsigned mogą poprzedzać lub podążać za dowolnym z typów całkowitych, z wyjątkiem enum, i mogą być również używane samodzielnie jako specyfikatory typów, w tym przypadku są one zrozumiałe odpowiednio jako signed int i unsigned int. W przypadku użycia samego słowa kluczowego int przyjmuje się signedjako . W przypadku użycia samych słów kluczowych long i short są zrozumiałe tak długo, jak długo int i short int.

Typy wyliczenia są uważane za typy podstawowe. Specyfikatory typów wyliczenia są omawiane w deklaracjach wyliczenia.

Słowo kluczowe void ma trzy zastosowania: aby określić typ zwracany przez funkcję, aby określić listę typów argumentów dla funkcji, która nie przyjmuje argumentów, i określić wskaźnik do nieokreślonego typu. Możesz użyć void typu , aby zadeklarować funkcje, które nie zwracają żadnej wartości lub zadeklarować wskaźnik do nieokreślonego typu. Zobacz Argumenty , aby uzyskać informacje na void temat tego, kiedy pojawia się on samodzielnie w nawiasach po nazwie funkcji.

Specyficzne dla firmy Microsoft

Sprawdzanie typów jest teraz zgodne ze standardem ANSI, co oznacza, że typ short i typ int są odrębnymi typami. Na przykład w tym przykładzie pokazano ponowne zdefiniowanie w kompilatorze Microsoft C zaakceptowanym przez poprzednie wersje kompilatora.

int   myfunc();
short myfunc();

W następnym przykładzie zostanie również wygenerowane ostrzeżenie dotyczące pośredniców do różnych typów:

int *pi;
short *ps;

ps = pi;  /* Now generates warning */

Kompilator języka Microsoft C generuje również ostrzeżenia dotyczące różnic w logowaniu. Na przykład:

signed int *pi;
unsigned int *pu;

pi = pu;  /* Now generates warning */

Wyrażenia typu void są oceniane pod kątem skutków ubocznych. Nie można użyć (nieistniejące) wartości wyrażenia, które ma typ void w żaden sposób, ani nie można przekonwertować void wyrażenia (niejawnej lub jawnej konwersji) na dowolny typ z wyjątkiem void. Jeśli używasz wyrażenia dowolnego innego typu w kontekście, w którym void wymagane jest wyrażenie, jego wartość zostanie odrzucona.

W celu zachowania zgodności ze specyfikacją void** ANSI nie można używać jako int**. Tylko void* może być używany jako wskaźnik do nieokreślonego typu.

END Microsoft Specific

Można utworzyć więcej specyfikatorów typów z deklaracjami, zgodnie z typedef opisem w deklaracji Typedef. Aby uzyskać informacje na temat rozmiaru każdego typu, zobacz Magazyn typów podstawowych .

Zobacz też

Deklaracje i typy
typeof, __typeof__ (C23)
typeof_unqual, __typeof_unqual__ (C23)