C語言學習筆記(17)

來源:互聯網
上載者:User

1. 連接器

C語言有個思想是分別編譯,也就是把一個C語言的項目分成若干個來源程式,讓他們在不同的時候單獨進行編譯,然後在恰當的時候整合到一起。這個整合的過程就是由連接器完成的。

大多數時候,連接器和編譯器都是分開的,連接器本身並不懂得太多C語言的文法規則。因為他一般不與C直接接觸,我們想想之前說過C語言的編譯運行過程,編譯器的責任其實就是將C語言翻譯成連接器能夠理解的形式。

連接器把由編譯器產生的若干個目標模組,整合成一個載入模組,或者是一個可執行檔,能夠被作業系統直接執行。

此外,連接器還要處理命名衝突。連接器通常把目標模組看成時一組外部對象組成的,每個外部對象都代表著機器記憶體的一部分,並且通過一個外部名稱來識別。因此,當函數和變數沒有被聲明為static的時候,都被看做是一個外部對象。也有一些編譯器,對static聲明的變數進行一個名字的特殊處理,然後也將其當做外部對象。

2. 再說extern

其實extern也是連接器的功勞。例如extern int i;再連接器看來,這是一個聲明,不是一個定義,這個聲明代表他不需要為其分配空間,而是在其他程式中尋找一個同名的外部對象的引用。

因此,在這個項目中必須有extern的引用。如果當程式中包含兩個定義,一般的編譯器都會報錯。那麼,我們最好的辦法,是把extern的定義都寫在一個統一的標頭檔中,當需要外部變數的時候,就引用這個標頭檔。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.