use*_*411 3 c syntax language-lawyer
我查了一下,这有效:
long static int const unsigned my_variable = 123;
Run Code Online (Sandbox Code Playgroud)
我知道这很愚蠢,但为什么我们一开始就有这样的可能性呢?
类型名称是多个单词的整个想法已经够糟糕的了,但现在我学会了允许以任何顺序排列的单词并与其他限定符交错?
任何学习 C 的新手unsigned int都会const short想知道 is 是unsigned一种类型还是像 is 那样的某种限定符const?那么有吗unsigned float等等
所有这些看起来比对所有类型(例如 )明显使用一些单字标记更加复杂uint,ulongint这让我怀疑我是否正确理解了某些内容?
您可以这样做,因为标准说您可以,并且标准这么说是因为标准前的实现允许这样做(尽管标准前的实现不识别signed为关键字或long long类型)。请参阅 C11 \xc2\xa76.7.2 类型说明符 \xc2\xb62:
\n\n每个声明的声明说明符以及每个结构声明和类型名称的说明符限定符列表中应至少给出一个类型说明符。每个类型说明符列表应为以下多重集之一(当每项有多个多重集时,以逗号分隔);类型说明符可以以任何顺序出现,也可能与其他声明说明符混合。
\n
列表中给出的多重集之一是:
\n\n\n\n
long long,signed long long,long long int, 或者signed long long int
该措辞意味着您还可以使用
\nint long signed long\nRun Code Online (Sandbox Code Playgroud)\n作为类型名称。这不是一个好的做法,但你可以做到。
\n请注意,在除第一个以外的任何位置指定存储类都是过时的 \xe2\x80\x94\xc2\xa0 \xc2\xa76.11.5 存储类说明符注释:
\n\n\n将存储类说明符放置在声明中声明说明符开头以外的位置是一项过时的功能。
\n
这意味着您使用的示例使用long static int const unsigned my_variable = 123;的是过时的功能。最好使用:
static long int const unsigned my_variable = 123;\nRun Code Online (Sandbox Code Playgroud)\n最好连续放置类型信息:
\nstatic const unsigned long int my_variable = 123;\nRun Code Online (Sandbox Code Playgroud)\n或者
\nstatic unsigned long int const my_variable = 123;\nRun Code Online (Sandbox Code Playgroud)\n(两者都是合法的;我更喜欢第一个)。int您可以从所有版本中删除 ,而不会影响其含义。