Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是C和C+的所有版本中的有符号、无符号、长和短所有有效类型+;?_C++_C_Language Lawyer - Fatal编程技术网

C++ 是C和C+的所有版本中的有符号、无符号、长和短所有有效类型+;?

C++ 是C和C+的所有版本中的有符号、无符号、长和短所有有效类型+;?,c++,c,language-lawyer,C++,C,Language Lawyer,N3797 7.1.1/3中有以下注释: 注意:由于有符号、无符号、长型和短型默认表示int,因此在其中一个说明符之后出现的类型名将被视为(重新)声明的名称。 但这只是一张纸条。标准中是否有类似的规范性声明 是标准的符合标准的C和C++使用 >签名< /强>,未签署< /St>,长< /强>和短< /强>在每种情况下没有 int >强>p> 或者,在代码中,以下标准是否符合?如果符合,说明在哪里 signed a; unsigned b; short c; long d; signed f(si

N3797 7.1.1/3中有以下注释:

注意:由于有符号、无符号、长型和短型默认表示int,因此在其中一个说明符之后出现的类型名将被视为(重新)声明的名称。

但这只是一张纸条。标准中是否有类似的规范性声明

是标准的符合标准的C和C++使用<强> >签名< /强>,<强>未签署< /St>,<强>长< /强>和<强>短< /强>在每种情况下没有<强> int >强>p> 或者,在代码中,以下标准是否符合?如果符合,说明在哪里

signed a;
unsigned b;
short c;
long d;
signed f(signed p, unsigned q, short r, long s);
unsigned* f(signed* p, unsigned* q, short* r, long* s);
<> >我犹豫是否问它是推荐的还是首选的,因为害怕得到基于意见的答案。

< P>关于你的问题:我是否适合标准的C和C++在每个情况下使用无符号的、无符号的、长的和短的? 因为还有一种东西是
无符号字符
,答案是不,并非在所有情况下都是这样。i、 e.如果需要
无符号字符
,则需要指定字符。您提到的注释的意思是,如果不使用显式类型,那么默认情况下,该类型将是
int

有关更准确的答案,请阅读c11标准第6.2.5节。此处复制第4和第6段,以了解其相关性,但其他部分也将阐明您问题的其他部分:

4

有五种标准的有符号整数类型,分别指定为有符号字符、短整数、整数、长整数和长整数 类型可以通过几种其他方式指定,如中所述 6.7.2.)也可能有实现定义的扩展有符号整数类型。38)标准和扩展有符号整数类型为 统称为有符号整数类型。39)

6

对于每个有符号整数类型,都有一个对应的(但不同的)无符号整数类型(用关键字unsigned指定),该类型使用相同的存储量(包括符号信息)并具有相同的对齐要求。与标准有符号整数类型相对应的Bool类型和无符号整数类型是标准无符号整数类型。与扩展有符号整数类型相对应的无符号整数类型是扩展无符号整数类型。标准和扩展无符号整数类型统称为无符号整数类型。40)

<强>可查找< <强> > C++引用<强> < /强> BR>


具体来看属性表。

据我所知,一直都是这样,但我们至少可以回到最早的公开标准草案。对于C++和将在段<代码> 7.1.5.2简单类型说明符<代码>表7 < /C>简单类型说明符及其指定的类型包括以下条目:

unsigned   “unsigned int”
signed     “int”
long       “long int”
short      “short int”
对于C,我们可以回到
6.7.2节中类型说明符所说的:

[…]每一份 类型说明符应为以下集合之一(当有 一条线路上有多台);[……]

并包括以下项目符号:

-short,signed short,short int或signed short int

-int,signed,或signed int

-无符号,或无符号整数

-长、有符号长、长整型或有符号长整型


因此,所有符合标准的类型说明符和两个引用都来自各自标准草案的规范部分。

除了
char
signed char
char
是不同的类型),是的,如果总是正确的,我们可以回到最古老的标准:C89和C++98

各类型规范清单应为以下一套:;类型说明符可以以任何顺序出现,可能与其他声明说明符混合在一起

  • void

  • char

  • signed char

  • 无符号字符

  • short
    signed short
    short int
    ,或
    signed short int

  • unsigned short
    ,或
    unsigned short int

  • int
    signed
    signed int
    ,或无类型说明符

  • 无符号
    ,或
    无符号整数

  • long
    signed long
    long int
    ,或
    signed long int

  • unsigned long
    ,或
    unsigned long int

  • float

  • double

  • long-double

  • struc
    t-or-
    union
    说明符

  • enum
    -说明符

  • typedef
    -名称

语义学

结构、联合和枚举的说明符在3.5.2.1至3.5.2.3中讨论。typedef名称的声明在3.5.6中讨论。其他类型的特性在3.1.2.5中讨论

上述每个逗号分隔列表指定相同的类型,但对于位字段声明,带符号int(或带符号)可能不同于int(或无类型说明符)。

类似地,在C++98§7.1.5.2简单类型说明符中:


有符号和无符号本质上是不同的类型,具有相同的大小!在N3797中,7.1.6.2表10使用了相同的措辞。谢谢+1-那是我一直在寻找的参考资料,只是找不到。谢谢@EJP-因为char是一个关键字,所以可以接受unsigned修改类型
char
,但不修改unsigned ccha