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