c - 你如何确定你的机器是否支持 C 中的标准整数数据类型?

标签 c stdint

我对 C 中 stdint.h 的概念有些熟悉。通过明确说明整数的大小,头文件将用该机器上的适当整数替换 #define 整数。例如,如果我的机器有 16 位无符号整数,uint32_t 将替换为 long unsigned int

但是,假设您的机器最多只支持 32 位整数。如果您使用 int64_t 会发生什么?如果 native 不支持此整数大小,那么如何解决这个问题,因为没有可以修复它的替代方法?

编译器会抛出错误提示无法解析吗?或者它会尝试使用两个 32 位分配来保存 64 位数据类型吗?

最佳答案

如果不支持某种 stdint 类型,代码将无法编译。您可以像这样检查它们是否受支持:

#include <stdint.h>

#ifndef UINT64_MAX
#error uint64_t not supported
#endif

如果您的编译器支持一种类型但您的 CPU 不支持,这意味着一些编译器库代码将被静默调用以模拟更大的类型。

例如,如果您在 8 位微 Controller 上使用 uint32_t,编译器往往会支持它,但由于该类型仅通过软件模拟,因此生成的机器代码会变得又大又慢。

关于c - 你如何确定你的机器是否支持 C 中的标准整数数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41617433/

相关文章:

C: gcc 中的 uint16_t 减法行为

c - do while 循环中省略了 scanf

c - 左移 uint64_t 将最重要的双字清零

c - uint8_t 在达到 255 后不翻转到 0 无法正常工作

c - 在C中定义16位整数

c++ - 相当于 gnu 中 windows stdint.h 的 u_int16_t?

c - 在C混淆中将二维数组传递给函数

c - Gstreamer 接收视频 : streaming task paused, 原因未协商 (-4)

c - 意外的静态变量地址行为

c - 我需要有关 C 中字符串的帮助