2015-04-02 78 views
1
#include"header.h" 

int main(){ 

    function(); 
    return 0; 
} 

上面是我的代碼的簡化形式。我在header.h文件中實現了function(),並使用這個code.c文件將它放在同一個目錄中。gcc -c選項如何工作?

我聽說「gcc -c code.c」是「編譯但沒有鏈接」選項,但是這段代碼需要鏈接到header.h文件。所以我猜-c選項會標記一個錯誤,但它沒有。雖然沒有-c選項,它會標記一個錯誤。任何人都可以解釋這個-c選項如何工作?

+0

我覺得你對頭文件如何工作以及編譯和鏈接實際上是困惑的。標題只是聲明原型(實質上承諾函數將在未來實際存在)。鏈接器採取了這些承諾,收集了一些編譯後的代碼,並盡力完成它們。如果您試圖將其鏈接起來,那麼*然後*會出現錯誤。在linux下,如果你想直接調用鏈接器,鏈接器通常是'ld',或者你可以使用'gcc -o program obj.o'這樣的gcc來查看你的錯誤。 – Corbin 2015-04-02 04:15:57

回答

6

頭文件與鏈接無關。鏈接是將多個對象文件和庫組合成一個可執行文件。

頭文件由編譯器處理,作爲生成目標文件的一部分。因此,gcc -c將處理頭文件。

1

gcc -c編譯源文件而不鏈接。

頭文件與鏈接過程無關,它們只在編譯過程中用來告訴編譯器各種聲明和函數原型。

但是,在頭文件中實現函數是不好的做法,這兩種編譯策略都應該起作用。即海灣合作委員會有和沒有c標誌

+0

爲什麼您將代碼格式化爲任何理由? – dhein 2015-04-02 05:57:18

+0

另外,它看起來並不認爲這個答案會在2小時前給出的答案中增加一些重要的內容。 – 2015-04-02 07:24:48

+0

重點是「它應該成功編譯是否使用-c標誌」 – user3013807 2015-04-02 08:07:35