是否有任何解决方法使结构成员在C中以某种方式"私有"?

And*_*anu 14 c encapsulation

我正在用C开发一个简单的库,供我自己+一些朋友个人使用.

我目前有一个C结构,其中一些成员应该以某种方式隐藏在应用程序的其余部分,因为它们的使用只是内部的.偶然修改其中一个成员可能会使图书馆"疯狂".

是否有任何"解决方法"隐藏这些成员以使其无法访问?

Mar*_*tos 16

通常的技术是这样的:

/* foo.h */
typedef struct Foo Foo;

Foo *foo_create(...);

void foo_bark(Foo* foo, double loudness);

/* foo.c */
struct Foo {
  int private_var;
};
Run Code Online (Sandbox Code Playgroud)

您可以通过在标头中定义Foo和在.c文件中定义FooPrivate来部分隐藏数据成员:

struct FooPrivate {
  Foo public_stuff;
  int private_var;
}
Run Code Online (Sandbox Code Playgroud)

但是你的实现必须在Foo和FooPrivate之间来回转换,我发现这是一个皇家PITA,如果你以后改变主意并希望私有化,那将是一个维护负担.除非你想从代码中吸取每个最后一个CPU周期,否则只需使用访问器功能.

  • 你能不能更具体一点.:) (3认同)