【发布时间】:2017-03-23 17:36:16
【问题描述】:
我遇到了一个奇怪的静态库,其中包含一个 main() 函数 (C++)。
我只是想知道它的目的是什么。
main() 是如何执行的?
【问题讨论】:
-
它会像任何主程序一样执行吗? (反正只能有一个)至于目的何不问问图书馆的作者?
标签: c++ static-libraries main
我遇到了一个奇怪的静态库,其中包含一个 main() 函数 (C++)。
我只是想知道它的目的是什么。
main() 是如何执行的?
【问题讨论】:
标签: c++ static-libraries main
我只是想知道它的目的是什么。
在单元测试或图形/游戏引擎框架中,定义可执行程序的main() 入口点并绑定来自某些工厂模式模板的自定义类定义是一种常用技术。
main()是如何执行的?
根据定义,它是任何 c++ 程序的主要入口点,因此由程序启动链接描述文件触发执行。
使用这些东西意味着您将客户端类编写在可执行项目中,将它们与框架绑定,并省略定义main() 函数。
【讨论】:
从链接器的角度来看,main 函数在哪里并不重要——它可以在静态库中,也可以在独立的目标文件中,链接器不在乎。它从目标文件生成可执行文件,无论它们来自何处,并且在最终的可执行文件中,库/非库符号之间的所有区别都消失了。
至于目的,我可以想象某种专门的应用程序框架可以在库中具有 main,您以定义的函数的形式提供回调。
【讨论】:
main 提供跨平台设置和拆卸代码。当用户在#includeing SDL 之后键入main 时,它实际上是一个扩展为SDL_main 的宏,当一切都正确初始化时,它从main 调用。这提供了另一个用例,尽管我已经看到对这种方法的大量批评。
main 的宏是一个纯粹的邪恶。