Fun fact: the order of type qualifiers (const, volatile, restrict), type specifiers (char, int, long, short, float, double, signed, unsigned) and storage-class specifiers (auto, register, static, extern, typedef) is not enforced at the current indirection level. This means that the following declarations are identical:
long long int x;
int long long x;
long int long x;
typedef int myint;
int typedef myint;
const char *s;
char const *s;
const char * const volatile restrict *ss;
const char * volatile const restrict *ss;