Clang C头文件中int56_t等类型的存在原因及使用方法咨询
Clang C头文件中int56_t等类型的存在原因及使用方法咨询
嗨,我之前也碰到过这个有点冷门的类型,当时搜了好久才搞明白!其实int56_t、uint56_t这类56位整数类型是Clang针对特定硬件平台提供的非标准扩展类型,不属于C标准规定的内容,所以你搜不到太多公开资料完全正常,毕竟大部分开发者日常根本碰不到。
先看看你找到的这段头文件代码:
#ifdef __INT56_TYPE__ typedef __INT56_TYPE__ int56_t; typedef __UINT56_TYPE__ uint56_t; typedef int56_t int_least56_t; typedef uint56_t uint_least56_t; typedef int56_t int_fast56_t; typedef uint56_t uint_fast56_t;
这段代码的逻辑很简单:只有当编译器定义了__INT56_TYPE__这个内置宏时,才会导出这些56位整数类型。这类类型主要是为了适配一些特殊的嵌入式硬件或者DSP平台——有些处理器原生就支持56位宽度的整数运算,直接用这类类型就能利用硬件指令,大幅提升运算效率。
不过有几点要特别注意:
- 这些是Clang的私有扩展,完全没有可移植性,只有在特定编译目标或者启用了相关扩展的环境下才能用;
- 像x86、普通ARM这类通用平台上基本用不到,所以相关讨论和资料少得可怜;
- 如果你的代码需要跨平台兼容,千万别碰这类非标准类型,老老实实用C标准规定的
int32_t、int64_t这些类型才是稳妥的选择。
要是你只是好奇想试试,可以找找支持该扩展的目标平台编译代码,或者去Clang官方文档里搜搜目标特定扩展的内容,不过这类小众扩展的文档确实比较零散,得花点功夫找。
备注:内容来源于stack exchange,提问作者AsukaMinato
相关产品推荐
相关产品推荐

