我是 C 语言的新手,被这个问题难住了。在 C# 中,做这样的事情完全没问题,但在 C 中,编译器的工作方式不同,它需要事先知道类型定义。
struct FN;
typedef struct {
void (*create) (FN *fn);
} Window;
typedef struct {
Window window;
} FN;
是否有某种 C 技巧与指针等可以让我使用它来使其工作?我正在尝试创建一个“管理器”类,在其中我可以调用模块上的函数,然后将管理器传递到需要的地方。
在所示代码中,您首先声明一个名为 的结构(而非类型)
FN
。然后,您将其重新定义FN
为类型名称。除此之外,您不能将FN
其用作类型,因为它最初不是类型名称。如果你可以接受
FN
结构标签名称,那么你可以使用如果要创建
FN
类型名称,则声明结构但定义类型名称:只需写
至于你的代码,那么结构
以及具有别名的未命名结构
FN
是两种不同的类型说明符。