標籤:
C的簡介
C語言的結構極其緊湊,C語言是一種模組化的程式設計語言,整個程式可以分割為幾個相對獨立的功能模組,模組之間的相互調用和資料傳遞是非常方便的
C語言的表達能力十分強大。C語言兼顧了進階語言和組合語言的一些特點,既可以像組合語言那樣直接存取硬體的功能,也具有進階語言那樣面向使用者容易記憶、便於閱讀和書寫的優點
C語言的可移植性很好,C語言中沒有依賴於硬體的輸入輸出語句,輸入輸出功能都是通過調用庫函數來實現的,所以在一種電腦平台上開發的程式不需要進行修改或者只需要進行簡單的修改就可以移植到另外的一個電腦平台
C語言中具有預先處理功能,所以C語言就可以利用巨集指令來提高程式的可讀性和可移植性
C的開發流程
C是一種編譯型語言,所謂編譯型語言是指在程式運行之前,需要先經過編譯和連結過程:
1) 編輯源檔案(獲得源檔案)
2) 編譯源檔案(獲得目標檔案)
3) 連結目標檔案及庫檔案(獲得可執行檔)
4) 運行程式(獲得運行結果)
對變數定義的理解
比如: int i;
定義一個變數的過程實際上是向記憶體申請一個符合這個變數的資料類型的儲存單元的過程,因此可以認為變數的實質就是記憶體中某一個單元的格式符,對這個格式符的引用就相當於對相應的記憶體單元的讀取操作
字元數組和字串
用來存放字元型資料的數組稱為字元數組。字元數組的每個數組元素存放一個字元。作為數組的其中一個類型,字元數組的定義、初始化和易用等規則和一般的數組一樣
字串在C 語言中被當做字元數組來處理(其他比如java就是有單獨一個String 類型)
需要注意的是:C 語言中字串的末尾都隱含一個‘\0‘ 字元,因此長度為 n 的字串在記憶體中佔用 n+1個位元組
預先處理
預先處理是C 語言的一個重要的功能,它是由預先處理程式負責完成的。當對一個源檔案進行編譯時間,系統將自動調用於處理常式對檔案中的預先處理部分進行處理,完成之後才進入對源檔案的編譯。C語言中提供的預先處理功能包括宏定義、檔案包含以及條件編譯等
設計和編寫來源程式的時候有效使用預先處理可以提高項目的可移植性……
宏定義
C語言來源程式中,使用一個標識符來表示一個字串,稱為宏。程式編譯之前,預先處理程式會將來源程式中的標識符替換為字串,這個過程稱為宏展開
1) 不帶參數的宏定義,比如
//#define 宏名 字串#define PI 3.1415926....//就可以使用這個宏c=2*PI*r;...
2) 帶參數的宏定義
//#define 宏名(形式參數) 字串#define MAX(a,b) (a>b)?a:b
注意帶參數的宏定義,宏名 和 (形式參數)之間是不能有空格的,否則會在展開時出錯,假如有空格,就會在調用MAX(a,b) 的時候被替換(a,b) (a>b)?a:b (a,b),所以完全不是我預想的效果。
宏調用對的過程,其實只是一個符號的替換(在編譯之前),和函數是完全不同的
檔案包含
檔案包含是將指定檔案的內容插入到當前檔案之中。使用檔案包含,可以減少程式設計人員的重複勞動,提高程式的開發效率
1) #include<檔案名稱>
在系統設定的目錄中進行尋找,一般是通過環境變數來進行設定,一般用這種形式包含系統的標頭檔
2) #include"檔案名稱"
在當前的路徑下進行尋找,如果沒有找到再去系統指定的目錄下進行尋找,一般用這種形式包含使用者自訂的標頭檔
條件編譯
C語言中引入條件編譯主要是為了在不同的情況下控制不同的程式碼片段被編譯,這樣可以將針對不同情況的代碼編寫在同一個程式檔案中,從而方便程式的維護和移植。同時,使用條件編譯可以使目標程式變小,運行速度變快
1) #if、#else、#elif、#endif命令
#if 常量運算式 程式碼片段1#else 程式碼片段2#endif
如果常量運算式的值為真(非0),編譯程式碼片段1,否則編譯程式碼片段2
2) #ifdef、#else、#ifndef、#endif命令
#ifdef 宏名 程式碼片段1#else 程式碼片段2#endif
如果宏名在前面已經定義過,編譯程式碼片段1,否則編譯程式碼片段2
Linux C編程學習1---C語言基礎(簡介、預先處理……)