现代操作系统/编译器中 int (C 语言)不是 32 位?

问题描述 投票:0回答:5

这个问题实际上有点广泛。

根据过去 15 年的经验,我目前假设类型的大小如下:

byte = 8 bit

short = 2 bytes

int = 4 bytes

long long = 8 bytes

是否存在可以挑战这一假设的现代操作系统?

c
5个回答
4
投票

无论是否存在这样的“现代”系统,您都应该

static_assert
在您的代码中断言这些假设,以便如果您的代码被移植到假设不正确的平台,则会提醒进行移植的人立即解决问题。


3
投票

该标准在这个问题上故意含糊不清,仅指定:

  • C90:

    sizeof(short) <= sizeof(int) <= sizeof(long)

  • C99:

    sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

此外,C99只要求int至少是16位值。

此外,“byte”不是 C 数据类型。


0
投票

根据thisUnicos有int为64位。 当然,“现代”编译器的定义相当模糊。 您仍然可以购买适用于 MS DOS 的 Borland C++ 并让您的整数为 16 位,但这现代吗?


0
投票

可能有一个例外。

long long = error

我听说旧的 Microsoft C 编译器存在问题。我在源代码中看到了一些解决方法。然而 Microsoft 32 位 C/C++ 优化编译器版本 16(来自 Visual Studio 2010)确实有很长一段时间。


0
投票

你有很多平台(特别是嵌入式),但它不是。你例如可以有 2 个八位字节字符。

© www.soinside.com 2019 - 2024. All rights reserved.