打印
[STM8]

Error[Pe029]: expected an expression 知道原因不

[复制链接]
4858|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jd9945|  楼主 | 2016-7-19 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#define offsetof(TYPE, MEMBER) ((unsigned int) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({ \
        const typeof( ((type *)0)->member ) *__mptr = (ptr); \
        (type *)( (char *)__mptr - offsetof(type,member) );})


struct student {
        char name[20];
        char sex;
};



void   main(void)
{   
  
//  off_set = offsetof(student_info, age);  
//  stu_info.age = 10;
//  ptr = container_of(&stu_info.age, student_info, age);
    struct student st={"zhangsan",'m'};
    struct student *tmp;
    char *ptr_name=st.name;
    tmp=container_of(ptr_name,struct student,name);
}
沙发
jd9945|  楼主 | 2016-7-19 16:25 | 只看该作者
在iar中编译不行, 换成mdk也不行

使用特权

评论回复
板凳
JasonWangSE| | 2016-7-19 17:08 | 只看该作者
你说的是 typeof吗?换成gcc估计就行了

使用特权

评论回复
地板
jd9945|  楼主 | 2016-7-19 17:21 | 只看该作者
是啊, 在gcc中可以,想移植到mcu中去

使用特权

评论回复
5
JasonWangSE| | 2016-7-19 17:30 | 只看该作者
本帖最后由 JasonWangSE 于 2016-7-19 17:42 编辑
jd9945 发表于 2016-7-19 17:21
是啊, 在gcc中可以,想移植到mcu中去

typeof是gcc的扩展关键字,需要编译器支持;其实强转也能实现
#define container_of(ptr, type, member) \
            (type *)((long)ptr - offsetof(type, member))



使用特权

评论回复
6
jd9945|  楼主 | 2016-7-19 20:18 | 只看该作者
谢谢, 我试试看

使用特权

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

本版积分规则

26

主题

84

帖子

0

粉丝