Specyfikatory typu C
Specyfikatory typów w deklaracjach definiują typ deklaracji zmiennej lub funkcji.
Składnia
type-specifier
: void
char
short
int
long
float
double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name
Typy signed char
, signed int
, , signed short int
i podpisanych długich int wraz z ich unsigned
odpowiednikami i enum
, są nazywane typami całkowitolicztowymi . float
Specyfikatory typu , double
i 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ę signed
jako . 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)