gpt4 book ai didi

c++ - 将 DLL 中的非导出函数声明为静态的原因

转载 作者:行者123 更新时间:2023-11-28 04:36:13 26 4
gpt4 key购买 nike

我继承了一个大型 C++ 项目,其中一个多线程可执行文件加载了几十个 DLL。在 Windows 上,使用 LoadLibrary() 加载 DLL,使用 GetProcAddress() 访问 DLL 的入口点。

每个 DLL 中的一个入口点是一个名为 MyEntryPoint 的函数,在 Windows 上声明如下:

extern "C" __declspec(dllexport) void MyEntryPoint() 

MyEntryPoint() 需要在定义它的 DLL 中调用辅助函数。辅助函数不需要导出到声明它们的 DLL 之外,因为它们仅在本地使用。但是,多个 DLL 具有同名的函数。示例:在几个 DLL 中,有一个函数声明为:

void MyHelperFunction()

由 MyEntryPoint() 调用。在某些 DLL 中,MyHelperFunction() 被声明为静态的,但在其他 DLL 中则不是。 (多年来,有很多人参与编写代码,他们的理解和专业知识水平各不相同。)将 MyHelperFunction() 声明为静态是否避免了全局命名空间的困惑,或者是否有其他原因这样做?

最佳答案

如果库接口(interface)是通过显式__declspec((dllexport) 注释定义的,static 不会引起任何变化。如果库接口(interface)是通过.def 文件(不太可能),将函数声明为 static 将排除它在 .def 文件中的使用。

除上述之外,static 会通知编译器函数只能从当前翻译单元访问,这允许更多优化(例如,内联和克隆更积极地完成)所以它总是 有利于使用它。

关于c++ - 将 DLL 中的非导出函数声明为静态的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51370447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com