怎么解决STM32库中typedef后的类型与C标准库函数原型的冲突?

[复制链接]
6808|7
 楼主| 礦ision 发表于 2012-2-27 22:23 | 显示全部楼层 |阅读模式
本帖最后由 礦ision 于 2012-2-27 22:53 编辑

比如
  1. const int8_t a[10] = “hello”;
  2. strlen(a);



编译时就会警告Warning[Pe167]: argument of type "int8_t const*" is incompatible with parameter of type "char const*"

这里的int8_t就与strlen()原型的char冲突,导致编译告警
香水城 发表于 2012-2-27 22:25 | 显示全部楼层
在项目中找找,哪里定义了int8_t?
 楼主| 礦ision 发表于 2012-2-27 22:31 | 显示全部楼层
3.5库的stm32f10x.h中有
typedef int8_t  s8;

另外据说stdint.h有类似的定义,但是这是IAR的库,看不到
香版的意思是我需要自己typedef char int8_t;
是吗?
aozima 发表于 2012-2-27 22:36 | 显示全部楼层
字符,字符串是 char
int8_t 是指有符号8位数据。

两者是不一样的意义。 虽然好多环境中是一样的,但严格起来不应该乱用。
 楼主| 礦ision 发表于 2012-2-27 22:40 | 显示全部楼层
4# aozima 可我换成uint8_t一样告警
aozima 发表于 2012-2-27 23:03 | 显示全部楼层
试过直接使用char吗?

char并不一定是8位,有些平台上面可能是16位的。

所有使用字符串的程序,一律使用char.
而不要使用 int8_t, 更不要是 uint8_t。
uc_stm32f050 发表于 2012-2-28 08:57 | 显示全部楼层
本帖最后由 uc_stm32f050 于 2012-2-28 09:01 编辑

const char a[10] = “hello”;
strlen(a);

或者:
const int8_t a[10] = “hello”;
strlen((char *)a);
uc_stm32f050 发表于 2012-2-28 08:58 | 显示全部楼层
char,signed char,unsigned char是三种不同的类型。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

66

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部