打印

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

[复制链接]
6127|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
礦ision|  楼主 | 2012-2-27 22:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 礦ision 于 2012-2-27 22:53 编辑

比如
const int8_t a[10] = “hello”;
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位数据。

两者是不一样的意义。 虽然好多环境中是一样的,但严格起来不应该乱用。

使用特权

评论回复
5
礦ision|  楼主 | 2012-2-27 22:40 | 只看该作者
4# aozima 可我换成uint8_t一样告警

使用特权

评论回复
6
aozima| | 2012-2-27 23:03 | 只看该作者
试过直接使用char吗?

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

所有使用字符串的程序,一律使用char.
而不要使用 int8_t, 更不要是 uint8_t。

使用特权

评论回复
7
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);

使用特权

评论回复
8
uc_stm32f050| | 2012-2-28 08:58 | 只看该作者
char,signed char,unsigned char是三种不同的类型。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

66

帖子

0

粉丝