你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

结构体定义的方法之结构体之间相互包含

[复制链接]
fury-roar 发布时间:2016-12-30 17:10
本帖最后由 fury-roar 于 2016-12-31 15:04 编辑

在定义若干结构体时,可能会出现以下情况,即结构体之间相互包含:
typedef void (*pwmcallback_t)(PWMDriver *pwmp, void *arg);
typedef struct {
  uint32_t                  frequency;
  pwmcnt_t               period;
  pwmcallback_t        callback;
} PWMConfig;
typedef struct  {
  pwmstate_t                state;
  const PWMConfig       *config;
  pwmcnt_t                   period;
} PWMDriver;

如果按照上述顺序定义结构体的话,编译出现错误。
现使用下面正确的方法:
typedef struct PWMDriver PWMDriver;
typedef void (*pwmcallback_t)(PWMDriver *pwmp, void *arg);
typedef struct  {
  uint32_t                  frequency;
  pwmcnt_t               period;
  pwmcallback_t        callback;
} PWMConfig;
struct PWMDriver {
  pwmstate_t                state;
  const PWMConfig       *config;
  pwmcnt_t                   period;
} ;




收藏 1 评论17 发布时间:2016-12-30 17:10

举报

17个回答
fury-roar 回答时间:2016-12-31 15:00:23
shuolang126 发表于 2016-12-31 08:02
有问题吧?
typedef struct  {
  uint32_t                  frequency;

笔误,正确的是
typedef struct {
  uint32_t                  frequency;
  pwmcnt_t               period;
  pwmcallback_t        callback;
}PWMConfig;
fury-roar 回答时间:2016-12-31 14:59:27
moyanming2013 发表于 2016-12-30 22:42
没看出来谁相互包含?
你下面的结构体连个名字也没有啊!闹什么啊

sorry,写错了。
应该是
typedef struct {
  uint32_t                  frequency;
  pwmcnt_t               period;
  pwmcallback_t        callback;
}PWMConfig;
moyanming2013 回答时间:2016-12-30 22:42:18
没看出来谁相互包含?
你下面的结构体连个名字也没有啊!闹什么啊
  1. typedef struct {
  2.   uint32_t                  frequency;
  3.   pwmcnt_t               period;
  4.   pwmcallback_t        callback;
  5. };
复制代码
peter001 回答时间:2016-12-30 17:50:57
这个要学一下
五哥1 回答时间:2016-12-30 23:52:04
认真学习中
shuolang126 回答时间:2016-12-31 08:02:13
有问题吧?
typedef struct  {
  uint32_t                  frequency;
  pwmcnt_t               period;
  pwmcallback_t        callback;
};
这个明显存在语法错误啊!
小小超 回答时间:2016-12-31 08:15:13
进来学习一下
yhyeefocus 回答时间:2016-12-31 08:30:08
占位               
黑皮男 回答时间:2016-12-31 08:55:39
学习学习
海迹天涯 回答时间:2016-12-31 11:12:19
给你顶起
zbber 回答时间:2016-12-31 17:31:35
学习学习,支持一下 楼主加油
moyanming2013 回答时间:2016-12-31 19:13:23
本帖最后由 moyanming2013 于 2016-12-31 19:17 编辑
fury-roar 发表于 2016-12-31 14:59
sorry,写错了。
应该是
typedef struct {

那也没有“相互包含”啊?!
只是一个结构体的成员是另一个结构体的对象。
如果存在了“相互包含”,那么说明你在构建结构体时数据封装是有问题的。
不可能有如下情形:
鸟类包含喜鹊,而喜鹊又包含鸟类。
leo121_3006061 回答时间:2017-1-1 10:15:52
damiaa 回答时间:2017-1-1 10:33:23
好好讨论讨论
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版