我经常听到这样的说法:“C中的内联函数暴露了内部数据结构”,这也是一些人不喜欢它们的原因之一。
有人可以解释,怎么样?
提前致谢。
假设我有一个程序code.c和一个函数func()。我可以1)使func()内联 - 这将暴露我在code.c中的数据结构所做的事情.2)我可以将func()放在一个库中,并将其作为共享库提供(这是不可读的 - 我猜猜??:p)----这是正确的分析吗?
答案 0 :(得分:2)
由于您将内联函数定义放在头文件中(除非在单个cpp文件中使用),消费者需要将其包含在内,然后我猜您会暴露代码的内部工作原理。
但是,由于替代方案通常是宏,我怀疑这是反对它们的一个很好的理由。
答案 1 :(得分:1)
与编译成库或对象模块的东西相比,它肯定会更透明。那是因为您可以看到源代码,因此编写以任何方式操作数据结构的代码。
但是,对于您拥有源代码的非线路功能,我可能会受到更多保护。
有些软件公司小心翼翼地保护他们的软件源代码,只发布与之链接的对象模块,或共享库,或者(恐惧!)。DLL。
答案 2 :(得分:1)
内联方法可以扩展所有方法调用。因此,不要让foo()成为JMP或CALL指令,而只是复制调用它的foo()的实际指令。如果这包含关键数据,那么虽然内联函数通常用于短的一到两行方法或更大的表达式,但它会暴露出来。