|
本帖最后由 fury-roar 于 2016-12-31 15:04 编辑 在定义若干结构体时,可能会出现以下情况,即结构体之间相互包含:, k* ^8 M2 S9 R+ d) B4 L" r typedef void (*pwmcallback_t)(PWMDriver *pwmp, void *arg); typedef struct {- I4 u( |5 a+ R uint32_t frequency; pwmcnt_t period; pwmcallback_t callback; } PWMConfig; typedef struct {8 b- n3 p9 r1 p& h% T7 r2 T+ \" Y: \ pwmstate_t state;( I8 [" n/ H8 R const PWMConfig *config;, ~% R9 C% I Z2 v- F2 ~. ]5 Y pwmcnt_t period; } PWMDriver; 如果按照上述顺序定义结构体的话,编译出现错误。, L/ m4 \" u7 s. E 现使用下面正确的方法:! k) N/ q1 H6 H9 T, k typedef struct PWMDriver PWMDriver; typedef void (*pwmcallback_t)(PWMDriver *pwmp, void *arg); typedef struct {& i7 \! D O, r' D# b uint32_t frequency;& t! N4 D( g' E* C. j$ l pwmcnt_t period;" Q( O- p7 G0 y. o! F# i9 | pwmcallback_t callback; } PWMConfig; struct PWMDriver { pwmstate_t state; const PWMConfig *config;: t' I$ D6 ~* ?" l' H4 X0 _" h pwmcnt_t period; } ;9 X% o5 T$ c! k8 i' r3 ~- _0 K % j7 n- L' Z; E" j* h " T) T3 e0 h3 J1 Q. {! w3 p ) S+ y3 c; V# R; R' Q9 r4 M/ p7 |' q# A |
微信公众号
手机版
笔误,正确的是6 P9 e6 m. t9 g3 C- c. g
typedef struct {' @% v" |5 C! @7 u
uint32_t frequency;* n& n* S" f2 l- H; ]$ T
pwmcnt_t period;7 `: @- Z) B+ t5 A4 f3 e1 g) Q
pwmcallback_t callback;
}PWMConfig;
sorry,写错了。
应该是
typedef struct {
uint32_t frequency;9 A7 A7 i( [. M6 P2 P6 y
pwmcnt_t period;# W' G: a3 h9 `/ ~. \! j
pwmcallback_t callback;
}PWMConfig;
你下面的结构体连个名字也没有啊!闹什么啊7 c; n, t& B7 z' D! V$ r) H
typedef struct {
uint32_t frequency;
pwmcnt_t period;+ G4 d9 X# P' S& ~; l
pwmcallback_t callback;
};
这个明显存在语法错误啊!
那也没有“相互包含”啊?!, H- C6 c3 h4 L* y8 ?
只是一个结构体的成员是另一个结构体的对象。0 y( i- I" D% i2 y: {- v
如果存在了“相互包含”,那么说明你在构建结构体时数据封装是有问题的。/ i" Z& b( Y# I, I2 V* M6 ~3 C# I
不可能有如下情形:
鸟类包含喜鹊,而喜鹊又包含鸟类。