我正在玩一些C代碼,寫一個小型的網絡服務器。我所做的目的是使用不同的網絡技術編寫服務器,以便我可以更多地瞭解它們(多線程vs多進程vs選擇vs輪詢)。大部分代碼保持不變,但我希望網絡代碼能夠被「換出」,以針對不同的技術進行一些性能測試。我想過使用ifdefs,但看起來它很快會讓代碼變得醜陋。有什麼建議麼?處理多個C「項目」中的類似代碼
1
A
回答
3
動態庫加載?例如在Linux中是dlopen
。
只需構建一個需要動態加載的組件通用的API。
1
用靈活的接口將網絡部分編譯到它自己的庫中。根據需要將該lib編譯到各種包裝中。您甚至可以找到符合您要求的預先存在的庫。
2
我更喜歡從C/C++源碼推送「條件編譯」到makefile,即具有從多個.c/.cpp文件生成的相同符號,但僅鏈接由構建選項選擇的對象中的鏈接。
如果你還沒有看過nginx,可能會給你一些關於web服務器實現的想法。
1
把網絡相關功能的不同實現放到不同的.c文件中,共享一個共同的頭文件,而不是鏈接到你想要使用的文件。從這裏開始,您可以使用這種方法爲您的makefile創建x個不同的可執行文件,因此您可以只說「make httpd_select」或「make httpd_poll」等。
尤其適用於基準測試以查找最好的方法可能會讓你在編譯器/鏈接器級別做更可靠的結果,而不是通過共享庫或函數指針,因爲這可能在運行時帶來額外的開銷。
相關問題
- 1. C++中的類似Python的多處理
- 2. 如何處理jira的多個類似項目
- 3. 多個項目的源代碼管理
- 4. 如何在一個項目中創建類似的代碼
- 5. 爲什麼這個python隊列代碼處理項目多次?
- 6. 合併多個類似的AJAX代碼
- 7. 如何在Rails MVC中處理類似的項目?
- 8. 如何處理碼頭集裝箱中的PHP項目代碼
- 9. 在C++類中處理多個狀態
- 10. 類似PVS-Studio的工具用於C項目中的靜態代碼分析?
- 11. 比較多個MySQL項目並顯示類似的項目
- 12. Listview排序代碼顯然干擾項目處理代碼
- 13. 一個包含C代碼和彙編代碼的C項目
- 14. 解決方案中的多個項目與源代碼管理中的多個項目
- 15. VBA:處理多個消息項目
- 16. 使用SVN處理多個項目?
- 17. 如何處理多個NServiceBus項目?
- 18. C代碼預處理器
- 19. 如何處理while循環中的多個類似條件?
- 20. 多處理和python代碼
- 21. 代碼和項目屬性中的預處理器定義
- 22. 類處理,重複代碼
- 23. WPF C#創建類似VS的項目
- 24. 與C和C++代碼的C++項目
- 25. 處理許多類似div標籤
- 26. 提及的C#代碼從多個項目
- 27. 如何迭代QListWidget項目並處理每個項目?
- 28. PyQt,Qt,一個事件處理程序,處理很多項目
- 29. 兩個C#項目共享代碼
- 30. 處理單個maven項目中的多個工件
沒有評論的另一個「驅車倒票」......多麼幼稚。 – jldupont