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

在C中声明结构而不定义它,c,struct,declaration,C,Struct,Declaration,我希望在C中声明一个结构,而不同时定义它(即分离接口和实现),这样其他人就可以在他们的项目中包含它,并根据他们的需要定义它(它仅在我的代码中用作参数)。因此,我想知道这是否是: A) 可能(可能只是使用宏) B) 被认为是良好的实践(在我的特殊情况下) B在没有上下文的情况下很难回答(而且仍然是主观的),所以我只希望对照C中任何常见的预先存在的模式来检查它,以解决给定的上下文(如果有的话)。我有以下代码: typedef struct { bool logged_in; } Foo;

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

A) 可能(可能只是使用宏)

B) 被认为是良好的实践(在我的特殊情况下)

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

typedef struct {
    bool logged_in;
} Foo;
我希望如下(伪代码):

因此,该声明可以由将其包含在项目中的人员定义。在我的代码中,我仅将其用作参数,而不尝试访问其包含的属性,如下所示:

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

谢谢。

转发如下声明:

typedef struct Foo Foo;
然后用“全名”来定义它:

struct Foo {
    …
};
struct Foo;
或者您可以直接转发声明“全名”:

struct Foo {
    …
};
struct Foo;
并使用:

bool bar(struct Foo *foo) {
    …
}

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

typedef struct Foo_ Foo;

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

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

struct Foo作为转发声明应该足够了。请在头文件foo.hWow中定义它,谢谢,速度很快。好的,等我回到电脑前,我会试一试的(现在无法确认马克是否回答了)。谢谢,我也要试一试吗