C-Typspezifizierer
Typspezifizierer in Deklarationen definieren den Typ einer Variablen oder Funktionsdeklaration.
Syntax
type-specifier
: void
char
short
int
long
float
double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name
Die Typen signed char
, signed int
, signed short int
und signed long int werden zusammen mit ihren unsigned
-Äquivalenten und enum
als integrale Typen bezeichnet. Die Typspezifizierer float
, double
und long double
werden als Gleitkomma-Typen bezeichnet. Sie können einen beliebigen ganzzahligen oder Gleitkomma-Typspezifizierer in einer Variablen oder einer Funktionsdeklaration verwenden. Wurde ein type-specifier
nicht in einer Deklaration angegeben, wurde er ursprünglich als int
angenommen. Der Microsoft-Compiler akzeptiert keine int
-Standarddeklarationen mehr.
Die optionalen Schlüsselwörter signed
und unsigned
können vor oder nach jedem integralen Typ außer enum
stehen. Sie können außerdem als Typspezifizierer allein verwendet werden. In diesem Fall werden sie als signed int
bzw. unsigned int
interpretiert. Wenn das Schlüsselwort int
allein verwendet wird, wird angenommen, dass es signed
ist. Wenn die Schlüsselwörter long
und short
allein verwendet werden, werden sie als long int und short int
interpretiert.
Enumerationstypen werden als Basistypen betrachtet. Typspezifizierer für Enumerationstypen werden unter Enumerationsdeklarationen erläutert.
Das Schlüsselwort void
dient drei Zwecken: der Angabe eines Funktionsrückgabewerts, der Angabe einer Argumenttypenliste für eine Funktion, die keine Argumente akzeptiert, und der Angabe eines Zeigers auf einen unbezeichneten Typ. Sie können den void
-Typ verwenden, um Funktionen zu deklarieren, die keinen Wert zurückgeben, oder um einen Zeiger auf einen nicht angegebenen Typ zu deklarieren. Weitere Informationen zu void
, wenn es alleine innerhalb der Klammern nach einem Funktionsnamen angezeigt wird, erhalten Sie unter Argumente.
Microsoft-spezifisch
Die Typüberprüfung ist jetzt ANSI-konform. Das bedeutet, dass short
und int
unterschiedliche Typen sind. Dieses Beispiel zeigt eine Neudefinition im Microsoft C-Compiler, die von älteren Versionen des Compilers akzeptiert wurde.
int myfunc();
short myfunc();
Im folgenden Beispiel wird ebenfalls eine Warnung über die Dereferenzierung zu unterschiedlichen Typen generiert:
int *pi;
short *ps;
ps = pi; /* Now generates warning */
Der Microsoft C-Compiler generiert auch Warnungen zu Unterschieden im Vorzeichen. Zum Beispiel:
signed int *pi;
unsigned int *pu;
pi = pu; /* Now generates warning */
Ausdrücke vom Typ void
werden im Hinblick auf Nebeneffekte ausgewertet. Sie können den (nicht vorhandenen) Wert eines Ausdrucks vom Typ void
in keiner Weise verwenden. Sie können auch keinen void
-Ausdruck (durch implizite oder explizite Konvertierung) in einen beliebigen Typ außer void
konvertieren. Wenn Sie einen Ausdruck eines anderen Typs in einem Kontext verwenden, in dem ein void
-Ausdruck erforderlich ist, wird dessen Wert verworfen.
Zur Einhaltung der ANSI-Spezifikation darf void**
nicht als int**
verwendet werden. Nur void*
kann als Zeiger auf einen nicht angegebenen Typ verwendet werden.
Ende Microsoft-spezifisch
Sie können mit typedef
-Deklarationen zusätzliche Typspezifizierer erstellen, wie unter Typedef-Deklarationen beschrieben. Weitere Informationen über die Größe der einzelnen Typen erhalten Sie unter Speicherung von einfachen Typen.
Siehe auch
Deklarationen und Typen
typeof, __typeof__
(C23)
typeof_unqual, __typeof_unqual__
(C23)