我想在C中声明一个结构而不同时定义它(即分离接口和实现),以便其他人可以在项目中包含它并根据需要定义它(它仅用作参数在我的代码中)。因此,我想知道这是不是:
A)可能(可能只是使用宏)?
B)考虑好的做法(在我的特殊情况下)?
如果没有上下文(并且仍然是主观的),B很难回答,所以我只想检查C中用于解决给定上下文(如果有的话)的任何常见的预先存在的模式。我有以下代码:<div id="A">
<a href='#'>Test A1</a>
<div id="B">
<a href='#'>Test B</a>
</div>
<div id="C">
I'm in C
</div>
<a href='#'>Test A2</a>
我想这样(伪代码):
typedef struct {
bool logged_in;
} Foo;
因此,此声明可以由在其项目中包含此声明的人员定义。在我的代码中,我只使用它作为参数而不试图访问它包含的属性,如下所示:
typedef struct Foo;
感谢。
答案 0 :(得分:4)
转发声明如下:
typedef struct Foo Foo;
然后用它的'全名'来定义它:
struct Foo {
…
};
或者您可以直接声明'全名':
struct Foo;
并使用:
bool bar(struct Foo *foo) {
…
}
答案 1 :(得分:1)
enum WSType {
ACK,
REQUEST,
RESPONSE,
}
impl WSType {
fn to_str(&self) -> &str {
match self {
ACK => "ACK",
REQUEST => "REQUEST",
RESPONSE => "RESPONSE",
}
}
}
fn main() {
let val = "ACK";
// test
match val {
ACK.to_str() => println!("ack"),
REQUEST.to_str() => println!("ack"),
RESPONSE.to_str() => println!("ack"),
_ => println!("unexpected"),
}
}
我不知道你为什么不想这样做的原因。