C-Typspezifizierer

Typspezifizierer in Deklarationen definieren den Typ einer Variablen oder Funktionsdeklaration.

Syntax

type-specifier: voidcharshortintlongfloatdoublesignedunsignedstruct-or-union-specifierenum-specifiertypedef-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)