1變數宣告與函式宣告有一點不同,函式宣告的extern關鍵字可以省略,而變數宣告不寫extern意思完全不同,表示為定義了乙個區域性變數。
2static關鍵字宣告具有internal linkage,這些函式變數作用域僅限本檔案,則不想被外部檔案所訪問的變數和函式就可以宣告為static。
3用角括號包含的標頭檔案,gcc首先查詢-i選項指定的目錄,然後查詢系統的頭檔案目錄。引號包含的標頭檔案,gcc首先查詢包含這個標頭檔案的當前檔案所在的目錄,然後查詢-i選項指定的目錄,然後查詢系統的頭檔案目錄
4extern關鍵字具有previous linkage,表示當前宣告取決於編譯單元中前面對這個識別符號的宣告,如果前面找不到這個識別符號的宣告,這個識別符號具有extern linkage。
5靜態庫:庫檔名都是以lib開頭,靜態庫以.a作為字尾
$ ar rs [靜態庫名稱] [目標檔名]
gcc -c stack/stack.c stack/push
.c stack/pop
.car rs libstack.a stack.o
push
.opop
.ogcc main.c -l. -lstack -o main
ar用來打包,r表示將後面的目標檔案列表新增到檔案包中。s為靜態庫建立索引,這個索引被鏈結器使用。
gcc -c 生成目標檔案 -l告訴編譯器去哪兒找需要的庫檔案 -l.在當前目錄查詢
-l引數就是用來指定程式要鏈結的庫,-l引數緊接著就是庫名
gcc -print-search-dirs 可以看到gcc庫檔案的搜尋路徑列表。如果不指定-l目錄,則會出問題。
6鏈結靜態庫和共享庫的區別:鏈結靜態庫,鏈結器會把靜態庫中的目標檔案取出來和可執行檔案真正的鏈結在一起。鏈結共享庫時,鏈結器知識確認可執行檔案引用的某些符號在共享庫中有定義,並沒有確定這些符號的位址,這些符號在可執行檔案中任然是未定符號,在執行時做動態鏈結。使用靜態庫好處:只取出需要的目標檔案做鏈結,不需要的檔案可以不連線。
Linux C程式設計一站式學習 筆記
關於程式的討論裡提到了c語言的可移植,原本不知道為什麼,現在知道,原來是因為各種平台上都有c語言的編譯器,這就好像是一種由於廣泛使用而成為規範的東西一樣,當所有機器上都有你的編譯器的時候,你的可移植性當然強了。之前看v6shell的 就沒明白詞法和語法有什麼差別,這裡講到了詞法就是單詞 token ...
Linux C程式設計一站式學習
北京亞嵌教育研究中心 ps ef grep sctp grep全稱是global regular expression print,表示全域性正規表示式.gdb除錯又看一遍。迅速用起 pthread cond timedwait 條件變數是利用執行緒間共享的全域性變數進行同步的一種機制,主要包括兩個...
LinuxC程式設計一站式學習 堆疊
本科學習資料結構時實踐比較少,因此最近開始複習,看到 既可以打基礎,又可以順便學習linux的知識。原始 include define max row 5 define max col 5 struct point stack 512 int top 0 int maze 5 5 void push...