【发布时间】:2016-09-18 12:13:48
【问题描述】:
typedef void* (*_add_elem)(shm_ds_t *ds, void *key, void *value, int size);
typedef void* (*_lookup)(shm_ds_t *ds, void *key);
typedef void (*_dump)(shm_ds_t *ds);
typedef int (*_compare)(void *key1, void *key2);
typedef struct shm_ds{
void *ds;
_add_elem shm_add_elem;
_lookup shm_lookup;
_dump dump;
_compare compare;
} shm_ds_t;
它的鸡和蛋的问题。我已经定义了一些使用shm_ds_t 类型的回调fn 指针,但是这种类型是在回调定义之后定义的。同样,如果我更改顺序,那么它会报告与在这种情况下定义之前应使用的回调定义相同的问题。任何人都可以建议这个解决方案吗?
【问题讨论】:
-
为什么不加
typedef struct shm_ds shm_ds_t? -
OT:后缀
_t是 POSIX 保留的。因此,为了与 POSIX 兼容,请为类型制定不同的命名方案。 -
@Sourav Ghosh,在应用您的建议后,我得到了这个编译错误:注意:预期的 'void * ()(struct shm_ds *, void *, void *, int)' 但参数是'void * ()(struct shm_ds_t *, void *, void *, int)' 类型的它区分
struct shm_ds和struct shm_ds_t -
这是
shm_ds_t而不是struct shm_ds_t。 -
但编译器稍后会抱怨。
标签: c declaration forward