C长型是多久?
我知道标题看起来很愚蠢,但我认为这值得一提。
以此声明(或定义,可能)为例:
_Thread_local long volatile static int _Atomic const long unsigned x = 10;
我曾经认为long long
是一个类型,但如果它是一个类型名称,那么如何插入这么多限定符呢?
所以我用这个问题咨询了N1570,只是为了更加困惑。 它提到了一些术语,如“ 类型说明符 ”和“ 类型限定符 ”,我在“类型说明符”中找不到多long long
,但在C中不long long
的原始类型? 有这么多书告诉我了!
澄清不重复:
是的,我看到一个现有的问题涉及long int long
,但这个问题与限定符有关,并且在C中。
如果你仔细阅读标准的正确位置,你会发现问题中的怪物声明是有效的,即使不可信。
‘正确位’包括:
6.2.5类型
有五种标准的有符号整数类型,指定为
signed char
,short int
,int
,long int
和long long int
。 (这些和其他类型可以用其他几种方式指定,如6.7.2中所述。)…
对于每个有符号整数类型,存在相应(但不同)的无符号整数类型(使用关键字
unsigned
指定),其使用相同数量的存储(包括符号信息)并具有相同的对齐要求。6.7.2类型说明符
每个声明中的声明说明符中应至少给出一个类型说明符,并在每个结构声明和类型名称的说明符限定符列表中给出。 每个类型说明符列表应为以下多个集合之一(用逗号分隔,每个项目有多个多集); 类型说明符可以按任何顺序出现,可能与其他声明说明符混合。
…
long long
,signed long long
,long long int
,或signed long long int
unsigned long long
,或unsigned long long int
其他声明说明符包括存储类(示例中为static
和_Thread_local
),以及类型限定符( volatile
和_Atomic
)。
6.7声明
6.7声明
句法
宣言:
declaration-specifiers init-declarator-listopt;
static_assert声明声明-符:
存储类说明符
声明说明符选择
type-specifier declaration-specifiers opt
type-qualifier声明 – 说明符opt
function-specifier declaration-specifiers opt
alignment-specifier declaration-specifiers opt
另外,正如奥拉夫在评论中指出的那样:
6.11.5存储类说明符
在声明中声明说明符开头之外的存储类说明符的放置是一个过时的function。
拆分整数类型关键字(类型说明符)也是古怪的。 宣言的更正统版本是:
static _Thread_local _Atomic const volatile unsigned long long int x = 10;
(或者它可能会掉落int
)。