C中的互连结构和回调

Abh*_*ury 3 c coding-style compiler-errors callback

我需要在C中定义一个结构和一个回调函数类型,如下所示:

typedef void (*callback)(struct XYZ* p);

struct {
    int a;
    int b;
    callback cb;
} XYZ;
Run Code Online (Sandbox Code Playgroud)

现在这段代码不会编译,因为每个定义都需要另一个.我的意思是,如果回调定义首先出现,它将无法编译,因为它需要定义结构.类似地,如果首先定义结构,则需要定义回调.也许这是一个愚蠢的问题,但有没有一个干净的方法来解决这些问题?

目前我的想法是使用void*作为回调参数,并将其强制转换为回调内的结构XYZ.有任何想法吗?

Kni*_*nug 8

struct在函数之前声明(尚未定义)typedef:

struct XYZ;

typedef void (*callback)(struct XYZ* p);

struct XYZ { // also fixed an error where your struct had no name
    int a;
    int b;
    callback cb;
};
Run Code Online (Sandbox Code Playgroud)

类似于声明函数原型并在定义之前调用它.