C语言 函数指针和结构自包含[重复]

yqkkidmi  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(147)
    • 此问题在此处已有答案**:

forward declaration of a struct in C?(3个答案)
5天前关闭。
我需要以下构造:

// Header file

typedef fc_t (*comdevCbackIsReady_t)(const comdev_t* const module);

typedef struct
{
    comdevCbackIsReady_t    cbIsReady;  

} comdev_t;

这不会编译,因为comdevCbackIsReady_t函数指针类型不知道comdev_t结构类型。如果我交换这两个位置,那么结构将不知道func指针类型。我目前的方法是将comdevCbackIsReady_t输入参数声明为void*。这不是很清楚。有没有办法"向前声明"其中之一?
EDIT这不会编译:

// Header file

struct comdev_t;

typedef fc_t (*comdevCbackIsReady_t)(const comdev_t* const module);

typedef struct
{
    comdevCbackIsReady_t    cbIsReady;  

} comdev_t;

对于comdevCbackIsReady_tcomdev_t仍然是未知类型。

ubbxdtey

ubbxdtey1#

在这个函数指针的typedef声明中

typedef fc_t (*comdevCbackIsReady_t)(const comdev_t* const module);

使用的名字comdev_t还没有声明,所以编译器会发出一个错误。
您可以只在结构声明中引入标记名,例如

struct comdev_t;

typedef fc_t (*comdevCbackIsReady_t)(const struct comdev_t* const module);

typedef struct comdev_t
{
    comdevCbackIsReady_t    cbIsReady;  

} comdev_t;

或者

typedef struct comdev_t comdev_t;

typedef fc_t (*comdevCbackIsReady_t)(const comdev_t* const module);

struct comdev_t
{
    comdevCbackIsReady_t    cbIsReady;  

};

相关问题