什么是"扩展整数类型"?

cla*_*aws 15 c gcc c99

引用我正在阅读的书:

  1. signed char, signed short int, signed int, signed long int, signed long long int被称为标准有符号整数类型
  2. unsigned char, unsinged short int, unsigned int, unsigned long int, unsinged long long int, _Bool被称为标准无符号整数类型
  3. 除了标准整数类型之外,C99标准还允许实现定义的扩展整数类型,包括有符号和无符号.例如,编译器可能提供有符号和无符号的128位整数类型.

我有第3点的问题.这些"扩展整数类型"是什么?任何例子?

joe*_*han 7

扩展整数类型是作为扩展提供的特定于实现的整数类型。因为有关此类扩展的几乎所有内容都是实现定义的,所以标准不能对它们进行太多说明。然而,C++09 提案提供了一个框架,用于以不干扰符合标准的程序的行为的方式实现此类扩展。

\n

你应该参考这篇文章,它涵盖了有关扩展整数类型的所有内容。

\n


use*_*342 6

扩展整数类型的一个示例是__int64MS Visual C 定义的 64 位有符号整数类型。虽然此类型显然是整数类型,但在旧版本的 MSVC 中,它不能作为intlong int、 或获得long long intlong long int(MSVC同时添加了支持。)

  • @user4815162342:gcc 上的 `sizeof(intmax_t)` 可能小于 `sizeof(__int128)`。它排除了“__int128”是扩展整数类型的可能性。 (8认同)
  • 这不是最好的例子,因为“MSVC”是 c90,而 c90 没有*扩展整数类型*。它们是在 c99 中引入的。 (6认同)
  • 注意:gcc 可能定义的 `__int128` 也不是扩展整数类型,因为 [GCC 不支持任何扩展整数类型](https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html )。 (5认同)
  • @ouah 好点。我认为更正确的说法是引入扩展整数类型来涵盖这种情况。 (2认同)