我经常听到这样的说法:"C中的内联函数公开内部数据结构",这也是一些人不喜欢它们的原因之一。
有人能解释一下吗,怎么解释?
提前谢谢。
假设我有一个程序代码.c和一个函数func()。我可以1)使func()内联-这将在代码中公开我对数据结构所做的任何操作。c 2)我可以将func(?
由于您将内联函数定义放在头文件中(除非在单个cpp文件中使用),而头文件需要由消费者包含,因此我猜您暴露了代码的内部工作。
但是,由于替代方案通常是宏,我怀疑这是否是反对它们的好理由。
与编译到库或对象模块中的东西相比,它肯定更透明。这是因为您可以看到源代码,因此可以编写以任何方式操纵数据结构的代码。
然而,对于您有来源的非行函数,我不知道如何才能更好地保护它。
有些软件公司小心翼翼地保护他们的软件源代码,只发布要链接的对象模块,或共享库,或(可怕!).DLLs.
内联方法就地展开所有方法调用。因此,它没有将foo()作为JMP或CALL指令,而是将其实际指令复制到被调用的位置。如果它包含关键数据,那么它将被公开,尽管内联函数通常用于短的一到两行方法或更大的表达式。