linux下c的学习
1.c語言相較于其他語言的優(yōu)點:
(1)良好的移植性
(2)運行效率高
(3)生成目標代碼質(zhì)量高,程序執(zhí)行效率高
2.靜態(tài)庫與動態(tài)庫的定義與區(qū)別
(1)庫(Library)說白了就是一段編譯好的二進制代碼,加上頭文件就可以供別人使用。
什么時候我們會用到庫呢?一種情況是某些代碼需要給別人使用,但是我們不希望別人看到源碼,就需要以庫的形式進行封裝,只暴露出頭文件。另外一種情況是,對于某些不會進行大的改動的代碼,我們想減少編譯的時間,就可以把它打包成庫,因為庫是已經(jīng)編譯好的二進制了,編譯的時候只需要 Link 一下,不會浪費編譯時間。
上面提到庫在使用的時候需要 Link,Link 的方式有兩種,靜態(tài)和動態(tài),于是便產(chǎn)生了靜態(tài)庫和動態(tài)庫。
(2)靜態(tài)庫的定義
靜態(tài)庫即靜態(tài)鏈接庫(Windows 下的 .lib,Linux 和 Mac 下的 .a)。之所以叫做靜態(tài),是因為靜態(tài)庫在編譯的時候會被直接拷貝一份,復制到目標程序里,這段代碼在目標程序里就不會再改變了。
(3)動態(tài)庫定義
動態(tài)庫即動態(tài)鏈接庫(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib)。與靜態(tài)庫相反,動態(tài)庫在編譯時并不會被拷貝到目標程序中,目標程序中只會存儲指向動態(tài)庫的引用。等到程序運行時,動態(tài)庫才會被真正加載進來。
(4)靜態(tài)庫在程序編譯時會被連接到目標代碼中,程序運行時將不再需要該靜態(tài)庫。
(5)動態(tài)庫在程序編譯時并不會被連接到目標代碼中,而是在程序運行是才被載入,因此在程序運行時還需要動態(tài)庫存在。
(6)無論靜態(tài)庫,還是動態(tài)庫,都是由.o文件創(chuàng)建的。
3.c的數(shù)據(jù)類型
3.1整型類型
類型 字節(jié)數(shù) 取值范圍
(1)int 4個字節(jié) -2^31 ~ 2^31-1
(2)short int 2個字節(jié) -215~215-1
(3)long int 8個字節(jié) -263~263-1
(4)char 1個字節(jié) -27~27-1
前四個默認是有符號類型的,后面兩個是無符號類型的
(5)unsigned int 4個字節(jié) 0~2^31-1
(6)unsigened char 1個字節(jié) 0~ 2^7-1
3.2 浮點類型
(1)float 4個字節(jié)
(2)double 8個字節(jié)
4.測量數(shù)據(jù)類型的大小用 sizeof
5.測數(shù)據(jù)類性取值范圍時
調(diào)用關(guān)鍵字,例如INT_MAX,INT_MIN 需要調(diào)用庫函數(shù)<limits.h>
因此c文件前應加上預處理語句#include<stdio.h>
6.注釋
6.1在c語句前加上//就行
6.2#if 0
#endif
在語句中間加上這兩行,這兩行間的語句就等于沒編輯在c文件中,也不進行編譯,這也是檢查c程序錯誤的一個好方法。
#if 1
#endif
…………
7.類型的強制轉(zhuǎn)換
7.1普通強制轉(zhuǎn)換
例如
int a,b;
(float)a+(float)b運算過程就是先將a,b轉(zhuǎn)換成float參與運算
結(jié)果就是個float類性
7.2數(shù)據(jù)類型的隱性轉(zhuǎn)換
int a=-20;
unsigned int b=6;
printf("%u\n",a+b);
這時輸出的結(jié)果就該是將a,b轉(zhuǎn)換成無符號類型再相加
數(shù)據(jù)類型轉(zhuǎn)換 char,short->int->unsigned->long->double<-float
總結(jié)
以上是生活随笔為你收集整理的linux下c的学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构盲点学习
- 下一篇: Linux下c的进一步学习