【问题标题】:C Programming integer size limitsC 编程整数大小限制
【发布时间】:2014-05-25 01:32:03
【问题描述】:

我是一名学生,目前正在通过一本名为“C Primer Plus,第 5 版”的书学习 C 编程语言。我正在学习它,因为我正在从事嵌入式系统和设备、设备驱动程序、低级东西等编程的职业。我的问题很简单,但我还没有从教科书和各种帖子中得到直接的答案在类似于我的问题的 SO 上。

如何确定 SHORT、INT 或 LONG 等整数数据类型的大小?我知道这是一个被问了很多的简单问题,但似乎每个人都用“取决于架构/编译器”来回答这个问题,这让我一无所知,对像我这样的新手没有帮助。

互联网上是否有一个隐藏的图表可以清楚地描述这些不兼容性,或者是否有一些查看编译器(16 位、24 位、32 位、64 位等)并被能够分辨出数据类型是什么?还是在特定系统上手动使用带有编译器的 sizeof 运算符是判断这些数据类型将保存什么的唯一方法?

【问题讨论】:

  • 使用sizeof 运算符找出答案。例如。 printf("size of int for this compiler and platform is %ld bytes\n", sizeof(int)); 如果您想要特定位宽的整数,请使用 <stdint.h> 中的类型。
  • 您总是会感到奇怪,例如在 x86_64 上,long 在 Linux 上是 64 位,而在 Windows 上是 32 位。
  • 如果你需要固定宽度的整数,stdint.h 定义了 typedef,比如uint32_t(至少,如果你的编译器提供了一个 32 位的无符号整数类型)。
  • 对于嵌入式设备/系统等,是使用编译器提供的typedef,还是使用标准(short|int|long)更好,还是有什么区别?

标签: c compiler-construction integer int platform


【解决方案1】:

您只需要正确的文档,在您的情况下,您需要定义标准的文档,并且在提出此类问题时,您应该命名至少 1 个版本;例如,C99 是该语言最流行的版本之一,它在 ISO-IEC 9899-1999 文档中定义。

C 标准没有以绝对值定义大小,它更适用于以字节表示的最小大小,有时甚至没有。

值得注意的例外是char,它是一种保证大小为 1 字节的类型,但在这里它对您来说是另一个潜在的陷阱,C 标准没有定义一个字节的大小,所以它说char 是 1 个字节,但是如果不知道你的平台,你就不能确定地说什么。

您始终需要了解标准和您的平台,如果您想以编程方式执行此操作,可以使用带有适用于您平台的宏的 limits.h 标头。

【讨论】:

    【解决方案2】:

    您正在寻找limits.h。它定义了各种宏,例如INT_MAXint 类型的最大值)或CHAR_BITchar 中的位数)。您可以使用这些值来计算每种类型的大小。

    【讨论】:

    • 如果我正在处理两种不同的架构,那么一旦架构发生变化,这些宏的值会改变吗?像这样的问题应该用预处理器条件来解决吗?
    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多