2013-03-29 23 views
2

我正在写一个图书馆。假设它有两个重要函数foo1和foo2。这两个函数都调用第三个函数foo0。但foo0并不打算在库编译和链接之后使用。有没有办法让foo0对库的用户不可用?是否有可能使某些函数用于创建调用程序不可用的库?

也许这只是为了让我的功能可以提供给用户,但我认为它会使一个更清洁的库。我很确定我已经使用了这样做的API。

后续问题:如果有可能,那么我想创建两个不同的头文件?一个用于编译库,另一个仅用于用户所需的typedefs,枚举,原型等?

谢谢!

+5

只需在.c文件中声明静态函数即可。 – oysteijo

+0

啊,所以这是静态函数的要点。那么人们通常会制作一个单独的头文件,它不包含静态函数的原型? – Bill

+0

发现我的问题的第二部分回答[这里](http://stackoverflow.com/questions/3689143/best-practice-for-delivering-a-c-api-hiding-internal-functions?rq=1)。 – Bill

回答

0

C标准没有提供跨越多个翻译单元的方法。一些连接器提供了帮助的手段。使用一些链接器,可以将多个对象模块链接在一起以生成组合对象模块,同时指示链接器从对象模块发布的对象模块中排除某些名称。在生成组合对象模块的链接期间,解析了在其中一个输入对象模块上使用并在另一个输入对象模块中定义的名称,因此它们不再需要在外部可见。

您需要指定使用哪些开发人员工具才能获得进一步的帮助。

+0

这很有道理。看来我的(小)图书馆的最佳做法是使用静态函数,然后只有一个翻译单元。 – Bill

0

执行此操作的最佳可移植方法是在构建时随机化函数名称,并使用预处理器宏将固定名称公开给源文件,但不公开标题中。如果函数名称是非描述性的,并且随着每个构建而改变,则没有人会尝试使用它。

相关问题