C 编程整数大小限制

标签 c compiler-construction integer int platform

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

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

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

最佳答案

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

C 标准没有定义绝对大小,它更倾向于以字节表示的最小大小,有时甚至不是这样。

值得注意的异常(exception)是 char,它是一种保证大小为 1 字节的类型,但这是另一个潜在的陷阱,C 标准没有定义一个字节有多大byte 是,所以它说 char 是 1 个字节,但是如果不了解您的平台,您不能肯定地说什么。

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

关于C 编程整数大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23847734/

相关文章:

c - 相邻位置之间的平均值

c - 文件数据在设备文件中存放在哪里?

compiler-construction - 编译器构造的语义分析阶段有哪些工具?

c# - C# lambda 编译成什么?堆栈框架,匿名类型的实例,还是?

c++ - std::streampos 是否保证为 unsigned long long?

c - 在 while 循环末尾添加 `;`

c - mpi 向随机选择的节点发送消息

检查整数是否适合 64 位的 Pythonic 方法

java - 编译时错误或运行时错误

java - 如何获取用户输入的年份的最后两位数