据我了解,C规范规定类型
那C99对于
也许他们之所以把它放在那里只是为了保持一致性,因为其他的
更新:
总结以下下面的讨论:
我的问题在很多方面都是错误的。C标准没有为指定比特数。它给出了一个范围[-32767,32767],它必须包含。
起初我意识到,大多数人会说,“但那个范围意味着至少16位!”但是C并不要求用二进制补码存储整数。如果他们说“16位”,可能有些平台有1位奇偶校验位、1位符号位和14位大小,仍然“符合标准”,但不能满足那个范围。
标准没有说明是最有效的类型。除了上述大小要求外,可以由编译器开发人员根据其认为最重要的任何标准来决定。 (速度、大小、向后兼容性等)
另一方面,就像向编译器提供提示,告诉它应该使用最优性能的类型,可能会牺牲其他任何权衡。
同样,会告诉编译器使用>=16位的最小类型,即使速度较慢也是如此。对于保留大型数组等空间非常有用。
int
应该是目标平台上至少包含16位的最高效类型。那C99对于
int_fast16_t
的定义难道不也是这样吗?也许他们之所以把它放在那里只是为了保持一致性,因为其他的
int_fastXX_t
也是必需的吗?更新:
总结以下下面的讨论:
我的问题在很多方面都是错误的。C标准没有为指定比特数。它给出了一个范围[-32767,32767],它必须包含。
起初我意识到,大多数人会说,“但那个范围意味着至少16位!”但是C并不要求用二进制补码存储整数。如果他们说“16位”,可能有些平台有1位奇偶校验位、1位符号位和14位大小,仍然“符合标准”,但不能满足那个范围。
标准没有说明是最有效的类型。除了上述大小要求外,可以由编译器开发人员根据其认为最重要的任何标准来决定。 (速度、大小、向后兼容性等)
另一方面,就像向编译器提供提示,告诉它应该使用最优性能的类型,可能会牺牲其他任何权衡。
同样,会告诉编译器使用>=16位的最小类型,即使速度较慢也是如此。对于保留大型数组等空间非常有用。
例子: 尽管在64位系统上MSVC使用x86-64有32位的int,但MicroSoft选择这样做是因为太多人认为int总是恰好32位,因此许多ABI会中断。然而,如果64位值在x86-64上更快,那么int_fast32_t可能是一个64位数。(我不认为事实确实如此,但它只是证明了这一点)