当你定义一个新的struct
最好也定义该类型的接口
(即“setter”和“getter”函数)或直接通过.
and ->
运营商?
EDIT
纯 C 编程
这取决于您的结构是否是抽象数据类型。如果您在标头中公开结构定义,则定义访问器没有任何意义 - API 客户端仍然可以直接读取/写入字段,并且在 C 中,他们确实有合理的期望它会起作用。
另一方面,您可能希望完全隐藏该结构,并且仅向客户端显示其声明,作为一种不透明句柄:
foo.h:
typedef struct foo foo;
foo* foo_create();
void foo_free(foo*);
int foo_get_bar(foo*);
void foo_set_bar(foo*, int);
foo.cpp:
struct foo {
int bar;
};
foo* foo_create() { return malloc(sizeof(foo)); }
void foo_free(foo* p) { free(p); }
int foo_get_bar(foo* p) { return p->bar; }
void foo_set_bar(foo* p, int newval) { p->bar = nwval; }
客户端.cpp:
#include "foo.h"
foo* f = foo_create();
f->bar = 123; // compile error, bar is not defined
foo_set_bar(f, 123); // ok
这样做的原因是 1) 封装,与 OO 中的相同,2) 版本控制 - 您可以向结构中添加新字段,或自由地重新组织它们,并且旧代码将保持二进制兼容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)