2010-04-30 21 views
1

嗨,我们可以使用static关键字隐藏给定文件外部的结构中的变量吗? 同样,我们可以使用static关键字隐藏给定文件外部的全局变量吗?如果是这样,请让我知道如何。 在此先感谢...隐藏来自外部链接的结构变量

回答

4

使用不透明数据类型,其中类型在头中声明,但结构在实现中定义。这意味着包含头文件的任何代码都可以传递类型的指针,但只有实现可以修改和处理结构中包含的数据。

典型的例子是从stdio.hFILE

欲了解更多信息,请参阅http://en.wikipedia.org/wiki/Opaque_pointer

+0

真棒谢谢soo muchhh – 2010-04-30 20:14:43

+1

另外,关于静态的使用,它的一个很好的用法是在实现中的私有函数,所以**实现之外没有任何**可以使用函数。例如,您可以创建两个或更多的API函数来以不同的方式创建数据,但每个函数(在实现中定义)都会调用私有/静态函数以实现特定的方式创建数据。 – 2010-04-30 20:24:39

+0

这就是静态内联函数的工作原理:即使编译器决定不将它们设置为静态,也可以将它们放在头文件中,从而获得每个对象文件的可执行代码的一个副本,但由于它们被声明为静态,在链接阶段,它们不会被导出,所以您不会遇到链接错误。 – Dacav 2010-04-30 20:47:10

1

您可以使用static关键字从文件外部隐藏全局变量,但不能隐藏结构的子集或单个变量。

1

由静态键盘把你通常做私人的功能。如果你将它用于一个变量,无论是全局的还是局部的,都会得到一个不可重入的代码。

我强烈建议你避免这种情况,因为在多线程环境中给你带来麻烦。你也许对多线程编程不感兴趣,但是你不知道你将来需要什么!

在你的具体问题上,我完全同意詹姆斯莫里斯关于不透明指针的建议。