2016-11-06 92 views
1

我在C中學習頭文件的使用。現在我在我的研究中發現了很少的資源,但沒有一個創建了期望的效果。在C中使用頭文件

首先,根據this教程,我可以在自己的頭文件中編寫我的函數。但我不想這樣做。即使我改變了接口保持不變的代碼,我也想保持頭文件不變。

回答this問題提出了兩種方法。首先,我可以單獨寫的代碼和頭文件,包括他們,當我編譯如下:

gcc -o myprog test.c library.c 

但我不想做,要麼。我的庫函數應該隨時可用,無需包含在編譯行中。根據相同的答案,我可以創建一個庫,然後通過-l開關鏈接到它。但是當涉及像printf這樣的函數時,你不需要執行其中的任何一個。你所要做的就是包含頭文件。有沒有辦法做到這一點?

摘要TL; DR

我想其中c寫一個庫:

  1. 不具有在頭文件本身來實現。

  2. 每次使用庫函數時都不必包含在編譯行中。

  3. 每次使用庫函數時都不必與-l鏈接。

  4. 基本上應該只使用包含頭文件的庫。

有什麼方法可以在Linux中完成嗎?

+0

在過去,在共享庫成爲標準之前,您可以將代碼添加到系統C庫中。這從來不是一個好主意,系統庫的任何更新都會丟棄你的新增內容。但它可以做到。否則,您必須找到一種方法來配置C編譯器來運行鏈接器來自動鏈接庫,就像它自動鏈接系統C庫一樣。這可能是可行的。儘管如此,這並不值得。 (同樣,對編譯器的更改可能意味着每次更新編譯器時都必須進行更改)。你應該簡單地使用'-lwhatever'。 –

回答

2

但是,當涉及到像printf這樣的函數時,你不需要做任何一個。你所要做的就是包含頭文件。有沒有辦法做到這一點?

簡答題是「否」。長時間的答案是C編譯器「免費」鏈接某些庫,包括實現printf的庫。

你可以選擇拒絕這些「免費贈品」 - 在gcc中它是-nodefaultlibs。如果您添加此選項,printf將會丟失。

注意:標題可以實現的一件事是宏。然而,宏不像正常的函數,所以你應該非常小心地對待它們。