2017-04-04 50 views
0

我有两个在Visual Studio 2015下编写的C项目。第一个项目只是一个静态库项目,而第二个项目是一个控制台应用程序,它使用第一个项目生成的静态库文件。验证封装生成的库

我在Windows中使用DUMPBIN工具检查了静态库文件,发现有很多变量和函数暴露在外面,这对封装问题非常不利。

我的问题是我怎么能确定我不公开那些应该是私人的功能。我是否需要每次使用该工具进行检查?我的问题也涵盖了变量。我所有的静态全局变量也暴露在外面。我如何强迫他们成为私人?

+0

根据定义,内部连接的名称不应该用于外部。如果您的库包含多个编译单元,则不要提供内部声明。 – Olaf

回答

1

我不认为在dumpbin输出中的存在可以被认为是“暴露”。所有的静态全局变量都需要一些空间分配,并可能在运行时进行初始化。所以对于他们来说,存在于dumpbin输出中是很自然的。另外,如果您正在编译链接时代码,那么所有内容实际上都是“暴露”的。

+0

啊,非常有用的信息。那么我怎么能理解哪些功能被暴露,哪些不是? – sanchop22

+2

在C中提供“公共接口”的正确方法是编写一个头文件,其中包含所有公开可用的东西的声明,并希望此头文件的用户不会尝试深入并连接一些内部东西(甚至意外地)。例如,如果你有一个非静态的全局变量int foo,那么有人可能会在他自己的“.c”文件中重新声明它为extern int foo和change。功能也一样。所以只要有可能,内部的东西应该被声明为静态的,因为其他东西都可以从外部访 – dodo951