这个问题实际上有点广泛。
根据过去 15 年的经验,我目前假设类型的大小如下:
byte = 8 bit
short = 2 bytes
int = 4 bytes
long long = 8 bytes
是否存在可以挑战这一假设的现代操作系统?
无论是否存在这样的“现代”系统,您都应该
static_assert
在您的代码中断言这些假设,以便如果您的代码被移植到假设不正确的平台,则会提醒进行移植的人立即解决问题。
该标准在这个问题上故意含糊不清,仅指定:
C90:
sizeof(short) <= sizeof(int) <= sizeof(long)
C99:
sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
此外,C99只要求int至少是16位值。
此外,“byte”不是 C 数据类型。
可能有一个例外。
long long = error
我听说旧的 Microsoft C 编译器存在问题。我在源代码中看到了一些解决方法。然而 Microsoft 32 位 C/C++ 优化编译器版本 16(来自 Visual Studio 2010)确实有很长一段时间。
你有很多平台(特别是嵌入式),但它不是。你例如可以有 2 个八位字节字符。