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

时间:2011-12-03 00:14:44

标签: c compiler-construction

问题实际上有点广泛。

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

byte = 8 bit

short = 2 bytes

int = 4 bytes

long long = 8 bytes

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

5 个答案:

答案 0 :(得分:4)

是否存在这样的“modern”系统,您应该static_assert在代码中断言这些假设,这样如果您的代码被移植到假设不正确的平台上,那么移植将立即提醒问题。

答案 1 :(得分:3)

该标准在此主题上有意模糊,仅指明:

  • C90:sizeof(short) <= sizeof(int) <= sizeof(long)

  • C99:sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

此外,C99仅要求int至少为16位值。

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

答案 2 :(得分:0)

根据this Unicos,int为64位。当然,“现代”编译器的定义非常模糊。你仍然可以为MS DOS购买Borland C ++并且你的整数是16位,但它是现代的吗?

答案 3 :(得分:0)

你有很多平台(尤其是嵌入式平台)。你例如可以有2个八位字节的字符。

答案 4 :(得分:0)

可能有一个例外。

long long = error

我听说过旧的Microsoft C编译器存在问题。我在源代码中看到了一些变通方法。但是,Microsoft 32位C / C ++优化编译器版本16(来自Visual Studio 2010)确实需要很长时间。

相关问题