6.7.2 Type specifiers

Syntax

1

type-specifier:

void

char

short

int

long

float

double

signed

unsigned

_Bool

_Complex

struct-or-union-specifier *

enum-specifier

typedef-name

Constraints

2

At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each struct declaration and type name. Each list of type specifiers shall be one of the following sets (delimited by commas, when there is more than one set on a line); the type specifiers may occur in any order, possibly intermixed with the other declaration specifiers.

  • void

  • char

  • signed char

  • unsigned char

  • short, signed short, short int, or signed short int

  • unsigned short, or unsigned short int

  • int, signed, or signed int

  • unsigned, or unsigned int

  • long, signed long, long int, or signed long int

  • unsigned long, or unsigned long int

  • long long, signed long long, long long int, or signed long long int

  • unsigned long long, or unsigned long long int

  • float

  • double

  • long double

  • _Bool

  • float _Complex

  • double _Complex

  • long double _Complex

  • struct or union specifier *

  • enum specifier

  • typedef name

3

The type specifier _Complex shall not be used if the implementation does not provide complex types.[1]

Semantics

4

Specifiers for structures, unions, and enumerations are discussed in 6.7.2.1 through 6.7.2.3. Declarations of typedef names are discussed in 6.7.7. The characteristics of the other types are discussed in 6.2.5.

5

Each of the comma-separated sets designates the same type, except that for bit-fields, it is implementation-defined whether the specifier int designates the same type as signed int or the same type as unsigned int.

Forward References

Footnotes