【问题标题】:verify generated library for the encapsulation验证生成的封装库
【发布时间】:2017-04-04 14:05:07
【问题描述】:

我在 Visual Studio 2015 下准备了两个 C 项目。第一个项目只是一个静态库项目,而第二个项目是一个控制台应用程序,它使用第一个项目生成的静态库文件。

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

我的问题是如何确保我不公开应该是私有的函数。我是否需要每次都使用该工具进行检查?我的问题也涉及变量。我所有的静态全局变量也暴露在外面。我怎样才能强制他们保密?

【问题讨论】:

  • 根据定义,具有内部链接的名称不应提供给外部。如果您的库包含多个编译单元,请不要提供内部声明。

标签: c static-libraries encapsulation dumpbin


【解决方案1】:

我不认为 dumpbin 输出中的存在可以被视为“暴露”。您所有的静态全局变量都需要一些空间分配,并且可能需要在运行时进行初始化。因此,它们出现在垃圾箱输出中是很自然的。此外,如果您使用链接时代码生成进行编译,那么所有内容实际上都是“公开的”。

【讨论】:

  • 啊,非常有用的信息。那么我如何理解哪些函数是公开的,哪些不是呢?
  • 在 C 中提供“公共接口”的正确方法是编写一个头文件,其中包含所有公开可用内容的声明,并希望该头文件的用户不会尝试更深入和连接一些内部的东西(即使是偶然的)。例如,如果您有一个非静态全局变量 int foo,那么实际上有人可能会在他自己的“.c”文件中将其重新声明为 extern int foo 并进行更改。函数也是如此。因此,尽可能将内部内容声明为静态,因为其他所有内容都可以从外部访问。
猜你喜欢
  • 1970-01-01
  • 2014-07-26
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多