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

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

[复制链接]
fury-roar 发布时间:2016-12-30 17:10
本帖最后由 fury-roar 于 2016-12-31 15:04 编辑 ! J# V% y  Y, h* A/ J0 y6 _

' [8 E! G3 `. P! w% G8 d在定义若干结构体时,可能会出现以下情况,即结构体之间相互包含:
) O0 F3 l4 n3 C6 ytypedef void (*pwmcallback_t)(PWMDriver *pwmp, void *arg);
1 y5 {( f* [2 }, s, @5 t- Ntypedef struct {
2 F, a# ^( K$ D5 `  uint32_t                  frequency;
& {! k; i* h/ S* y  V8 f/ s  pwmcnt_t               period;
9 ^) m  E$ d* ]# V  pwmcallback_t        callback;' p4 J- n- x& E+ o
} PWMConfig;" `7 a% p% y7 J' A/ k' w3 j
typedef struct  {
6 {' G) Q4 S' ?  pwmstate_t                state;' Z* c! u+ s8 i
  const PWMConfig       *config;
, t- \/ ]& p7 K. a3 G& w% i  pwmcnt_t                   period;) N7 Y# R% F7 }6 f
} PWMDriver;
. m5 Z4 P: \7 j+ t+ U2 V7 k$ v- k
9 `5 a6 ~0 S6 c8 ?0 W: r如果按照上述顺序定义结构体的话,编译出现错误。
! {" m7 l3 [$ f. `# }现使用下面正确的方法:- R- Y6 o3 C) a1 e5 c* U& U
typedef struct PWMDriver PWMDriver;
3 o8 b! T" ~  g$ `typedef void (*pwmcallback_t)(PWMDriver *pwmp, void *arg);6 e( N) g8 Q, L$ C
typedef struct  {9 K  s0 n* J6 P8 v
  uint32_t                  frequency;! I' a9 Q6 H6 T, R. e0 x6 z& n( `
  pwmcnt_t               period;
: \+ _" C9 m2 X( i+ h) F4 `  pwmcallback_t        callback;9 X% ~- b: r. P6 o2 K
} PWMConfig;
) P5 l( @) k* V0 J" C8 Zstruct PWMDriver {) `7 N0 x' @, C
  pwmstate_t                state;
3 g; o0 _7 V( N- |6 w2 q$ }  const PWMConfig       *config;
9 y9 i" K3 B7 P* }+ Y  pwmcnt_t                   period;
4 [9 ~" \" m7 l$ w% {& H} ;7 o7 N5 ^' ?8 n3 V/ i. p( I
- \( f% P: q' [* G8 L  \

# P/ [: k- a# n) X% N0 S8 N' ?3 K9 X3 u

- y) l0 v3 x8 l* R8 c9 j% }
赞 收藏 1 评论17 发布时间:2016-12-30 17:10

举报

17个回答
fury-roar 回答时间:2016-12-31 15:00:23
shuolang126 发表于 2016-12-31 08:02
: e3 o' j3 Z5 a8 ~8 m* `有问题吧?7 _8 v# @. ~5 v6 I
typedef struct  {
3 v( m$ b8 R- Z, o/ w  uint32_t                  frequency;

9 e& k2 ~5 Q- w1 C8 K% q& ]笔误,正确的是& i2 d# \4 G4 w% r2 I8 e
typedef struct {
& j2 C- G; L6 v( o  u. B  uint32_t                  frequency;
* f$ y7 m) Y6 u5 Y, F$ f  pwmcnt_t               period;1 Q# l3 B' W( _3 {  D1 b, z
  pwmcallback_t        callback;7 M$ d3 ]9 W: F& r( S$ ?
}PWMConfig;
fury-roar 回答时间:2016-12-31 14:59:27
moyanming2013 发表于 2016-12-30 22:42
( [' [& U- m: K0 g7 q, W+ O没看出来谁相互包含?6 n' W  m+ c" T5 K. b2 T
你下面的结构体连个名字也没有啊!闹什么啊
5 L1 {% G& k3 _1 L, z, c0 D
sorry,写错了。
* t! Y% X; l$ E8 }应该是
* h8 o- ?0 v, [' A( A1 }! O- U, H' [typedef struct {  Z  Y1 w" c# I
  uint32_t                  frequency;5 j) c6 B) E7 n  K' }7 K
  pwmcnt_t               period;+ f2 G3 T# }. w( x0 I
  pwmcallback_t        callback;
$ _. w, e6 y. R8 v  @# `3 f8 `1 j$ Q}PWMConfig;
moyanming2013 回答时间:2016-12-30 22:42:18
没看出来谁相互包含?
' E* Z  r# E$ I( j; ~6 }. E你下面的结构体连个名字也没有啊!闹什么啊
: h* E! y8 }5 H3 I( a
  1. typedef struct {
    8 p! c# r2 n* p5 K6 S2 J
  2.   uint32_t                  frequency;
    - T9 y& f; {8 e* u% }, l
  3.   pwmcnt_t               period;$ I9 S. N/ G4 ?' U% j4 _" V
  4.   pwmcallback_t        callback;, u2 d7 Y7 W+ `% _
  5. };
复制代码
peter001 回答时间:2016-12-30 17:50:57
这个要学一下
五哥1 回答时间:2016-12-30 23:52:04
认真学习中
shuolang126 回答时间:2016-12-31 08:02:13
有问题吧?4 f/ T; c' \( t+ B
typedef struct  {
/ \! p/ V& x, b, |  uint32_t                  frequency;
: O; O4 t3 }  Q. o4 K- ?( s% ~  pwmcnt_t               period;
& \: P8 D( j9 \+ R4 w  pwmcallback_t        callback;5 @% u! J. ^( D' a
};- f- j0 ^& j* @& V7 u2 U
这个明显存在语法错误啊!
小小超 回答时间: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
学习学习,支持一下 楼主加油
2 L% b$ |& d& F/ @+ |  K* [. t
moyanming2013 回答时间:2016-12-31 19:13:23
本帖最后由 moyanming2013 于 2016-12-31 19:17 编辑 4 n. [1 Q3 ]# \2 D. ]9 t; `
fury-roar 发表于 2016-12-31 14:59
5 |( D5 P. z. t; Z$ csorry,写错了。
1 Z* F& C7 E0 H: j6 x  q应该是
4 [* D3 E9 c% t; T* htypedef struct {

3 i! T  {+ w1 v" C+ G那也没有“相互包含”啊?!
& i: z1 p- |+ q6 w只是一个结构体的成员是另一个结构体的对象。
' j" d9 z9 A; g3 o% Z& W& Q( B9 t: V如果存在了“相互包含”,那么说明你在构建结构体时数据封装是有问题的。* T+ g! D& E% h( N3 R
不可能有如下情形:
/ ?; h& I0 _9 _& h# J* _鸟类包含喜鹊,而喜鹊又包含鸟类。
leo121_3006061 回答时间:2017-1-1 10:15:52
damiaa 回答时间:2017-1-1 10:33:23
好好讨论讨论
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版