C語言學習筆記 17

2021-09-05 23:34:07 字數 675 閱讀 7505

1. 聯結器

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

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

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

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

2. 再說extern

其實extern也是聯結器的功勞。例如extern int i;再聯結器看來,這是乙個宣告,不是乙個定義,這個宣告代表他不需要為其分配空間,而是在其他程式中尋找乙個同名的外部物件的引用。

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

C語言學習筆記17

define crt secure no warnings 1 include intmain int p arr 如果寫char 呢 int i 0 for i 0 i 10 i return0 野指標 1 指標未初始化 如果不知道賦值什麼,就賦值null空指標 null 用來初始化指標的,給指標...

C語言學習筆記 17

1.聯結器 c語言有個思想是分別編譯,也就是把乙個c語言的專案分成若干個源程式,讓他們在不同的時候單獨進行編譯,然後在恰當的時候整合到一起。這個整合的過程就是由聯結器完成的。大多數時候,聯結器和編譯器都是分開的,聯結器本身並不懂得太多c語言的語法規則。因為他一般不與c直接接觸,我們想想之前說過c語言...

C語言學習筆記

include include void swap int p1,int p2 void swapa int arr,int n void printfa int arr,int n int main int argc,char argv swap i,j printfa array,6 swapa...