在 C 中声明一个结构而不定义它

Declare a struct in C without defining it

我想在 C 中声明一个结构而不同时定义它(即分离接口和实现),以便其他人可以将它包含在他们的项目中并根据他们的需要定义它(它仅用作我代码中的一个参数)。因此,我想知道这是否是:

A) 可能(也许只是使用宏)?

B) 被认为是良好做法(在我的特定情况下)?

B 在没有上下文的情况下很难回答(并且仍然是主观的)所以我只希望它针对 C 中任何常见的预先存在的模式进行检查以解决给定的上下文(如果有的话)。我有以下代码:

typedef struct {
    bool logged_in;
} Foo;

我想这样(伪代码):

typedef struct Foo;

所以这个声明可以由将它包含在他们的项目中的人定义。在我的代码中,我只将它用作参数而不尝试访问它包含的属性,如下所示:

bool bar(Foo* foo) {
    //...
}

谢谢。

像这样向前声明它:

typedef struct Foo Foo;

然后用它的“全名”来定义它:

struct Foo {
    …
};

或者您可以直接转发声明“全名”:

struct Foo;

并使用它:

bool bar(struct Foo *foo) {
    …
}

你试过了吗?这为我编译,在 GCC 上没有警告:

typedef struct Foo_ Foo;

int bar( Foo *foop )
{
    return 1;
}

我不知道你为什么不想这样做。