为什么C变量大小实现具体?

时间:2011-11-30 03:11:56

标签: cross-platform

对于一个总是4个字节的int,它会不会更有意义(例如)?

如果变量大小是特定于实现的,我如何确保我的C程序是跨平台的?

3 个答案:

答案 0 :(得分:3)

类型的大小不是由c定义的,因为c代码需要能够在嵌入式系统以及普通的x86处理器和未来的处理器上进行编译。

您可以添加stdint.h,然后使用以下类型:

int32_t(32位整数类型)

uint32_t(32位无符号整数类型)

答案 1 :(得分:1)

C通常用于编写特定于其运行的CPU体系结构的低级代码。 int或指针类型的大小应该映射到处理器支持的本机类型。在32位CPU上,32位整数是有意义的,但它们不适合20世纪70年代早期常见的小型CPU,或十年后的微型计算机。现在,如果您的处理器本身支持64位整数类型,为什么要限制为32位整数?

当然,正如您所建议的那样,这使得编写真正便携式程序更具挑战性。确保不将特定体系结构类型的意外依赖性构建到程序中的最佳方法是尽早将它们移植到各种体系结构中,并经常在所有这些体系结构上构建和测试它们。随着时间的推移,您将熟悉可移植性问题,并且您将更倾向于更仔细地编写代码。 要注意并非所有处理器都具有与其指针类型相同宽度的整数类型,或者并非所有计算机都使用二进制补码算法来处理有符号整数,这将有助于您在自己的代码中识别这些假设。

答案 2 :(得分:0)

您需要检查实现中int的大小。不要以为它总是4个字节。使用

sizeof(int)