在 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;
}
我不知道你为什么不想这样做。
我想在 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;
}
我不知道你为什么不想这样做。