内联函数如何公开内部数据结构?

时间:2011-06-23 20:50:50

标签: c data-structures inline-functions

我经常听到这样的说法:“C中的内联函数暴露了内部数据结构”,这也是一些人不喜欢它们的原因之一。

有人可以解释,怎么样?

提前致谢。

假设我有一个程序code.c和一个函数func()。我可以1)使func()内联 - 这将暴露我在code.c中的数据结构所做的事情.2)我可以将func()放在一个库中,并将其作为共享库提供(这是不可读的 - 我猜猜??:p)----这是正确的分析吗?

3 个答案:

答案 0 :(得分:2)

由于您将内联函数定义放在头文件中(除非在单个cpp文件中使用),消费者需要将其包含在内,然后我猜您会暴露代码的内部工作原理。

但是,由于替代方案通常是宏,我怀疑这是反对它们的一个很好的理由。

答案 1 :(得分:1)

与编译成库或对象模块的东西相比,它肯定会更透明。那是因为您可以看到源代码,因此编写以任何方式操作数据结构的代码。

但是,对于您拥有源代码的非线路功能,我可能会受到更多保护。

有些软件公司小心翼翼地保护他们的软件源代码,只发布与之链接的对象模块,或共享库,或者(恐惧!)。DLL。

答案 2 :(得分:1)

内联方法可以扩展所有方法调用。因此,不要让foo()成为JMP或CALL指令,而只是复制调用它的foo()的实际指令。如果这包含关键数据,那么虽然内联函数通常用于短的一到两行方法或更大的表达式,但它会暴露出来。