c – 如何检查uint8_t是否作为类型而不是unsigned char存在?
我有两个编译器,一个识别uint8_t(GCC ARM-EABI),另一个不识别(瑞萨M16标准工具链).
瑞萨工具链不符合ANSI C标准,因此您可以抛弃.因此uint8_t,uint16_t,…未定义为现有类型. 为了保持可移植性,我想拥有相同的类型(最好是uint8_t,因为int的含糊不清). 我的平台也是不同大小的处理器(ARM是32位,瑞萨是16位).导致int成为不同的值. 有没有办法检查uint8_t是否作为一种类型存在? 如果没有,请将它(以及其他uint16_t,uint32_t,…)声明为一种类型? 解决方法
有几种不同的方法可以解决这个问题.在需要可移植的开源项目中,常见的解决方案是使用“配置脚本”来运行以设置构建系统.然后它会像某些config.h或类似设置或未设置的HAVE_UINTX_TYPES一样[这是“配置脚本”的结果之一,并执行以下操作:
#include "config.h" ... #ifndef HAVE_UINTX_TYPES #include "uintx_types.h" #endif 在一个较少“需要在几乎任何东西上运行”的系统中,你可以通过简单地将-DHAVE_UINTX_TYPES作为编译器标志的一部分来解决同样的问题.并且由于你(可能)有一些构建系统的一部分设置了不同的编译选项,为两个不同的构建选择了不同的编译器等,这应该不是一个很大的问题. 假设你很高兴你的unsigned char确实是8位,你也可以有一个uintx_types.h包含这样的东西: typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; 另一个选择是不直接使用uint8_t和uint16_t等,但是有自己的定义[并且这些定义取决于“是ARM或Renesas”的适当构建设置,例如通过使用不同的包含选项]: ARM / types.h中: typedef unsigned char u_int8; typedef unsigned short u_int16; typedef unsigned int u_int32; 瑞萨/ types.h中: typedef unsigned char u_int8; typedef unsigned int u_int16; typedef unsigned long u_int32; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |