|
本帖最后由 fury-roar 于 2016-12-31 15:04 编辑 ! J# V% y Y, h* A/ J0 y6 _ 在定义若干结构体时,可能会出现以下情况,即结构体之间相互包含: typedef void (*pwmcallback_t)(PWMDriver *pwmp, void *arg); typedef struct { uint32_t frequency; pwmcnt_t period; pwmcallback_t callback;' p4 J- n- x& E+ o } PWMConfig;" `7 a% p% y7 J' A/ k' w3 j typedef struct { pwmstate_t state;' Z* c! u+ s8 i const PWMConfig *config; pwmcnt_t period;) N7 Y# R% F7 }6 f } PWMDriver; 如果按照上述顺序定义结构体的话,编译出现错误。 现使用下面正确的方法:- R- Y6 o3 C) a1 e5 c* U& U typedef struct PWMDriver PWMDriver; 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; pwmcallback_t callback;9 X% ~- b: r. P6 o2 K } PWMConfig; struct PWMDriver {) `7 N0 x' @, C pwmstate_t state; const PWMConfig *config; pwmcnt_t period; } ;7 o7 N5 ^' ?8 n3 V/ i. p( I - \( f% P: q' [* G8 L \ 0 S8 N' ?3 K9 X3 u |
微信公众号
手机版
笔误,正确的是& i2 d# \4 G4 w% r2 I8 e
typedef struct {
uint32_t frequency;
pwmcnt_t period;1 Q# l3 B' W( _3 { D1 b, z
pwmcallback_t callback;7 M$ d3 ]9 W: F& r( S$ ?
}PWMConfig;
sorry,写错了。
应该是
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;
}PWMConfig;
你下面的结构体连个名字也没有啊!闹什么啊
typedef struct {
uint32_t frequency;
pwmcnt_t period;
pwmcallback_t callback;5 @% u! J. ^( D' a
};- f- j0 ^& j* @& V7 u2 U
这个明显存在语法错误啊!
那也没有“相互包含”啊?!
只是一个结构体的成员是另一个结构体的对象。
如果存在了“相互包含”,那么说明你在构建结构体时数据封装是有问题的。* T+ g! D& E% h( N3 R
不可能有如下情形:
鸟类包含喜鹊,而喜鹊又包含鸟类。