1. 程式人生 > >linux下c的學習

linux下c的學習

1.c語言相較於其他語言的優點:
(1)良好的移植性
(2)執行效率高
(3)生成目的碼質量高,程式執行效率高
2.靜態庫與動態庫的定義與區別
(1)庫(Library)說白了就是一段編譯好的二進位制程式碼,加上標頭檔案就可以供別人使用。
什麼時候我們會用到庫呢?一種情況是某些程式碼需要給別人使用,但是我們不希望別人看到原始碼,就需要以庫的形式進行封裝,只暴露出標頭檔案。另外一種情況是,對於某些不會進行大的改動的程式碼,我們想減少編譯的時間,就可以把它打包成庫,因為庫是已經編譯好的二進位制了,編譯的時候只需要 Link 一下,不會浪費編譯時間。
上面提到庫在使用的時候需要 Link,Link 的方式有兩種,靜態和動態,於是便產生了靜態庫和動態庫。
(2)靜態庫的定義
靜態庫即靜態連結庫(Windows 下的 .lib,Linux 和 Mac 下的 .a)。之所以叫做靜態,是因為靜態庫在編譯的時候會被直接拷貝一份,複製到目標程式裡,這段程式碼在目標程式裡就不會再改變了。
(3)動態庫定義
動態庫即動態連結庫(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib)。與靜態庫相反,動態庫在編譯時並不會被拷貝到目標程式中,目標程式中只會儲存指向動態庫的引用。等到程式執行時,動態庫才會被真正載入進來。
(4)靜態庫在程式編譯時會被連線到目的碼中,程式執行時將不再需要該靜態庫。
(5)動態庫在程式編譯時並不會被連線到目的碼中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在。
(6)無論靜態庫,還是動態庫,都是由.o檔案建立的。
3.c的資料型別
3.1整型型別
型別 位元組數 取值範圍
(1)int 4個位元組 -2^31 ~ 2^31-1
(2)short int 2個位元組 -215~2

15-1
(3)long int 8個位元組 -263~263-1
(4)char 1個位元組 -27~27-1
前四個預設是有符號型別的,後面兩個是無符號型別的
(5)unsigned int 4個位元組 0~2^31-1
(6)unsigened char 1個位元組 0~ 2^7-1
3.2 浮點型別
(1)float 4個位元組
(2)double 8個位元組
4.測量資料型別的大小用 sizeof
5.測資料類性取值範圍時
呼叫關鍵字,例如INT_MAX,INT_MIN 需要呼叫庫函式<limits.h>
因此c檔案前應加上預處理語句#include<stdio.h>
6.註釋
6.1在c語句前加上//就行
6.2#if 0
#endif
在語句中間加上這兩行,這兩行間的語句就等於沒編輯在c檔案中,也不進行編譯,這也是檢查c程式錯誤的一個好方法。
#if 1
#endif
…………
7.型別的強制轉換
7.1普通強制轉換
例如
int a,b;
(float)a+(float)b運算過程就是先將a,b轉換成float參與運算
結果就是個float類性
7.2資料型別的隱性轉換
int a=-20;
unsigned int b=6;
printf("%u\n",a+b);
這時輸出的結果就該是將a,b轉換成無符號型別再相加
資料型別轉換 char,short->int->unsigned->long->double<-float