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