回答
從鏈接器的角度來看,main
函數的位置並不重要 - 它可以位於靜態庫中,也可以位於獨立的對象文件中,鏈接器無所謂。它從目標文件生成可執行文件,無論它們來自哪裏,並且在最終的可執行文件中,庫/非庫符號之間的所有區別都會丟失。至於目的,我可以想象某種專門的應用程序框架可能在圖書館中佔主要地位,您可以以定義函數的形式爲其提供回調。
SDL執行此操作 - 其「main」提供跨平臺設置和拆卸代碼。當用戶在'#include'ing SDL之後鍵入'main'時,它實際上是一個擴展到'SDL_main'的宏,當所有事情都被正確初始化時,這個宏被從main調用。這提供了另一個用例,儘管我已經看到了對這種方法的相當多的批評。 – jaggedSpire
@ jaggedSpire,不知道這個,但是,這也是一個原因。然而,宏觀上重新定義「主」在我看來是純粹的邪惡。 – SergeyA
是的,那是我看到的主要批評(沒有雙關語意),而且之前也有點受傷。幸運的是,他們讓你強制使用自己的切入點,但是當出現問題時,它會帶來不太連貫的錯誤信息。有趣的東西,真的。 – jaggedSpire
我只是想知道它的目的是什麼。
這是一種常見的單元測試或圖形/遊戲引擎框架技術,用於定義可執行程序的入口點,並綁定來自特定工廠模式模板的自定義類定義。
main()
如何執行?
它是任何C++程序定義的主要入口點,所以執行由程序啓動鏈接器腳本觸發。
使用這樣的東西,意味着你寫你的客戶端類在一個可執行的項目,與框架約束他們,並省略定義main()
功能。
- 1. 爲什麼cmake_link_libraries包含靜態庫?
- 2. UML:包含靜態函數
- 3. 爲什麼C#靜態類包含非靜態類/結構體?
- 4. OpenCV和Visual Studio 2015:爲什麼包含靜態庫不工作?
- 5. 靜態庫不包含宏
- 6. 如何爲Core Plot包含靜態庫?
- 7. 爲什麼CanvasRenderingContext2D.createLinearGradient()不是靜態函數?
- 8. 爲什麼沒有數學函數的靜態庫?
- 9. 函數不包含,爲什麼?
- 10. GCC編譯的靜態庫包含什麼?
- 11. 爲什麼靜態庫函數的值錯誤?
- 12. 爲什麼Eclipse生成toString只包含非靜態字段?
- 13. 爲什麼`Random`默認不包含靜態的`Next`方法?
- 14. 爲什麼在歸檔期間靜態庫符號未包含在dSYM中?
- 15. 爲什麼在包含OpenSSL靜態庫時會出現編譯錯誤?
- 16. 爲什麼在包含類的構造函數之前調用靜態成員的構造函數?
- 17. 爲什麼我要使用靜態庫?
- 18. 爲什麼靜態用於導入庫
- 19. C++靜態庫太大了,爲什麼?
- 20. 在靜態庫中包含STL
- 21. 如何生成「自包含」靜態庫?
- 22. 在Xcode中包含多個靜態庫
- 23. 什麼是非靜態成員函數?
- 24. 靜態函數的優點是什麼?
- 25. 靜態函數的語法是什麼?
- 26. 爲什麼C++中的靜態函數原型參數會被ARGS()包圍?
- 27. 靜態函數與類的靜態指針有什麼區別
- 28. 爲什麼我們不能在靜態內部類中定義主函數?
- 29. 爲什麼jsp中的EL函數必須聲明爲靜態?
- 30. arg在ASM函數中包含什麼?
它得到執行像任何主要? (無論如何只能有一個)至於其目的爲什麼不問圖書館的作者? – Borgleader