什么是C中的“保护变量”?它是如何工作的?

时间:2010-06-03 06:53:50

标签: c

在C ++中,我们有抽象和数据隐藏。我们能通过C实现这个目标吗?

5 个答案:

答案 0 :(得分:6)

在.C文件中定义你的结构,并且只在你的标题中“转发声明”结构。

所以你的.C文件可以包含这个:

struct Car
   {
   char *brand;
   int   maxspeed;
   };

你的.H文件可能包含:

typedef struct Car *CarHandle;

然后编写函数来操作Car(setter,getters,...)并将它们放在与定义struct相同的.C文件中。 当然,函数原型应放在标题中。

现在调用者可以使用CarHandle和CarHandle上运行的函数,但是从不会看到Car结构中的内容。

答案 1 :(得分:2)

您可以使用不完整的派生类型,类似于C ++中的“opaque data”概念。 This is a pretty well written article on the subject.

答案 2 :(得分:0)

你可以使用静态(全局)变量和外部函数来操作它们。

答案 3 :(得分:0)

正如Peter Miehle所提到的,你可以创建一个模块专用的变量和函数(通常与文件相同,我想这取决于编译器)。

您可以将模块与类进行比较。 static个变量只能在模块中访问。您还可以通过在模块中将函数声明为static来使用等效的私有函数。

这个和真正的类之间的区别在于你只能有一个实例。但是只需要很少的工作,你也可以模仿几个实例的实现。

答案 4 :(得分:0)

High and Low-Level C文章包含很多好的提示。特别是,请查看“抽象数据类型”部分。

另请参阅:What methods are there to modularize C code?