您可以这样做,因为标准说您可以这样做,而标准这么说是因为前标准实现允许这样做(尽管前标准实现没有将signed
识别为关键字或long long
识别为类型).请参阅C11 §6.7.2 Type specifiers ¶2:
每个声明中的声明说明符以及每个 struct 声明和类型名称中的说明符-限定符列表中应至少给出一个类型说明符.类型说明符的每个列表应该是以下多集之一(当每项有多个多集时,用逗号分隔);类型说明符可以以任何顺序出现,可能与其他声明说明符混合出现.
列表中给出的多集之一是:
long long
、signed long long
、long long int
或signed long long int
措辞上的意思是你也可以使用
int long signed long
作为类型名称.这不是很好的练习,但你可以做到.
请注意,指定除第一个以外的任何位置的存储类都是过时的-§6.11.5 St或age class specifiers注:
将存储类说明符放置在声明中声明说明符的开头以外的位置是一项过时的功能.
这意味着您使用long static int const unsigned my_variable = 123;
的示例使用的是过时的功能.最好使用:
static long int const unsigned my_variable = 123;
更好的做法是将类型信息放在连续的位置:
static const unsigned long int my_variable = 123;
或
static unsigned long int const my_variable = 123;
(两者都是合法的;我更喜欢第一种).你可以go 掉所有版本中的int
,而不会影响意思.