爲什麼函數的定義不會與它們的聲明一起寫入同一個「some.h」文件中?如果我們不是從「some.c」文件中分離出「some.h」文件,會發生什麼?爲什麼函數的定義與聲明分離?
0
A
回答
1
所以,一個人知道最低限度他需要知道。 (這使得編譯速度更快,名稱衝突的機會更小,管理代碼的能力更容易等)。如Kerrek SB的this comment所述:如果將源代碼和代碼混合使用,則將大型項目劃分爲模塊很困難。例如,您可以編譯一個庫(包含定義)並將其提供給您的客戶(只關注接口)以及聲明(Headers),並且他將能夠使用它而無需知道實施來源。 (這樣你也可以隱藏實現細節)
沒有標題,他不知道庫中可用函數的用法。雖然不是強制性的,但建議將聲明和定義分開。
+0
I.e它只是用於編寫明確的代碼?但從編譯器來看它沒有關係,它們是否分開? –
+0
@DavidTsaturyan它的確如此。一個管理良好的項目編譯速度更快。 –
0
其實嘛,分離聲明和定義不是強制性的,而實際上一切都在思考這個問題分開使用和實施,這對於促進抽象,可重用性,模塊化等
如果你不這樣做遵循這些規則,那麼您將很快面臨多種定義的編譯問題等。
相關問題
- 1. 是否可以分離內聯函數的聲明和定義?
- 2. 函數聲明與定義Ç
- 3. 分配與函數聲明
- 4. 函數定義中的函數聲明
- 5. 函數聲明和定義
- 6. 什麼是winapi函數聲明約定?
- 7. 函數聲明爲static但從定義
- 8. 函數定義聲明函數嗎?
- 9. 函數聲明/函數定義
- 10. 爲什麼我得到預定義的gtk函數的隱式聲明錯誤?
- 11. 爲什麼這個函數聲明兩次?回調函數在哪裏聲明?
- 12. 爲什麼要在定義函數的過程中聲明變量?
- 13. 爲什麼在調用document.ready()時聲明的函數沒有定義?
- 14. 爲什麼TS與函數聲明抱怨裏面的函數體
- 15. 函數定義不聲明參數
- 16. 什麼是函數聲明中的DEFAULT_CC?
- 17. 函數聲明後的「 - >」是什麼?
- 18. 函數參數聲明的含義是什麼?
- 19. 爲什麼用戶角色與用戶定義保持分離?
- 20. 爲什麼在聲明成員函數時指定類名?
- 21. 函數聲明的含義
- 22. 分裂陣列與函數聲明
- 23. truthy和falsy聲明與分離功能
- 24. 爲什麼Doctype聲明分成兩行?
- 25. 爲什麼我明確地必須在這裏聲明函數?
- 26. 聲明函數返回取消定義
- 27. 星號*在函數聲明中的含義是什麼?
- 28. __devexit在函數聲明中的含義是什麼?
- 29. 當聲明一個函數時,'static'的含義是什麼
- 30. 爲什麼jsp中的EL函數必須聲明爲靜態?
當您嘗試鏈接多個翻譯單元(包含標題)時,您將會遇到「多重定義」錯誤。 –
感謝您提出這個問題,我一直在想這件事。我們的老師沒有解釋這一點的必要性。 @Kerrek爲什麼不讓函數在編譯器中隱式內聯呢? –
@ JohannesSchaub-litb:歷史?處理內聯定義更復雜並且需要實現,因此不需要從C89編譯器中獲取它... –