省略符号会自动默认为C中的签名变量吗?

时间:2018-03-11 05:35:48

标签: c

intchargit push REMOTE '*:*' git push REMOTE --all 等)?

这是否由规范保证,或者如果我认为这是理所当然的话,会有一些不起眼的版本或编译器会爆炸。

3 个答案:

答案 0 :(得分:6)

对于您列出的所有类型都是,而不是char

char以实现定义的方式签名或未签名。此外,charsinged charunsigned char完全不同,即使它与其中一个具有完全相同的属性。

你可能认为我在这里说话很疯狂,但这里直接来自C标准:

6.2.5类型 - 第15页

  

共有三种类型char,signed char和unsigned char   称为字符类型。实现应定义char to   具有与签名相同的范围,表示和行为   char或unsigned char。

答案 1 :(得分:3)

是以下两个变量定义相同:

long x = 9;
signed long x = 9;
此处不需要

signed关键字,因为默认情况下变量为signedchar除外。如果您需要使用unsigned,则需要明确使用unsigned关键字。

答案 2 :(得分:1)

  

省略a是否自动默认为C中的签名变量?

是的,通常,但不是一般的。 <强>例外

  1. signed是与charunsigned char不同的类型。 signed char的范围与charunsigned char相同。

  2. signed char遵循与wchar_t类似的3-ness。

  3. 位字段。

  4. 关于位字段的关键引用表明char位字段可以是有符号或无符号的。它是实现定义的行为。 See also。如果允许,使用intlongunsigned long会产生实施定义的行为。

      

    位字段的类型应为unsigned long_Boolsigned int或其他实现定义类型的限定或非限定版本。 C11dr§6.7.2.15

         

    位字段被解释为具有由指定位数组成的有符号或无符号整数类型。 125 §6.7.2.110

         

    125 如上面6.7.2中所述,如果使用的实际类型说明符是unsigned int或...,那么它是实现定义的,无论位字段是有符号的还是无符号的。

    1. 可能存在其他例外 - 但我不知道它们。