c - C 中的互连结构和回调

标签 c coding-style callback compiler-errors

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

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

struct {
    int a;
    int b;
    callback cb;
} XYZ;

现在这段代码无法编译,因为每个定义都需要另一个。 我的意思是,如果回调定义先出现,它就不会编译,因为它需要定义结构。同样,如果先定义结构,则需要定义回调。也许这是一个愚蠢的问题,但是否有一种干净的方法来解决此类问题?

目前我的想法是使用 void * 作为回调参数,并将其类型转换为回调内的结构 XYZ。有什么想法吗?

最佳答案

在函数 typedef 之前声明 struct(还没有定义它):

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;
};

类似于声明函数原型(prototype)并在其定义之前调用它。

关于c - C 中的互连结构和回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19704878/

相关文章:

c - 错误 : expected an identifier

python - 右括号的缩进

ios - iOS在渲染回调处理之前添加音频效果?

Javascript 为什么可以指定不带参数的回调?

ruby - 如何使用 ruby​​ regexp 将字符串替换为类似 "callback function"的操作

c - 11.exe 已停止工作(代码块)

c - 想要在不将数据类型更改为 char 的情况下删除警告

c - HDF gzip 压缩与 ASCII gzip 压缩

c# - 样板代码替换——这段代码有什么不好的地方吗?

java - 两种设计循环方式的区别