C語言的預處理、宏、文件包含

C語言介紹

C的開發流程

C 是一種編譯型語言,所謂編譯型語言是指在程序運行以前,須要先通過編譯和連接過程:java

  1. 編輯源文件(得到源文件)數組

  2. 編譯源文件(得到目標文件)函數

  3. 連接目標文件及庫文件(得到可執行文件)設計

  4. 運行程序(得到運行結果)code

對變量定義的理解

好比: int i;內存

定義一個變量的過程其實是向內存申請一個符合這個變量的數據類型的存儲單元的過程,所以能夠認爲變量的實質就是內存中某一個單元的格式符,對這個格式符的引用就至關於對相應的內存單元的讀取操做開發

字符數組和字符串

用來存放字符型數據的數組稱爲字符數組。字符數組的每一個數組元素存放一個字符。做爲數組的其中一個類型,字符數組的定義、初始化和易用等規則和通常的數組同樣字符串

字符串在C 語言中被當作字符數組來處理(其餘好比java就是有單獨一個String 類型)編譯

須要注意的是:C 語言中字符串的末尾都隱含一個'0' 字符,所以長度爲 n 的字符串在內存中佔用 n+1個字節程序設計

預處理

預處理是C 語言的一個重要的功能,它是由預處理程序負責完成的。當對一個源文件進行編譯時,系統將自動調用於處理程序對文件中的預處理部分進行處理,完成以後才進入對源文件的編譯。C語言中提供的預處理功能包括宏定義、文件包含以及條件編譯等

設計和編寫源程序的時候有效的使用預處理能夠提升項目的可移植性……

宏定義

C語言源程序中,使用一個標識符來表示一個字符串,稱爲宏。程序編譯以前,預處理程序會將源程序中的標識符替換爲字符串,這個過程稱爲宏展開

不帶參數的宏定義,好比

//#define 宏名 字符串
#define PI 3.1415926

....
//就可使用這個宏
c=2*PI*r;
...

帶參數的宏定義

//#define 宏名(形式參數) 字符串
#define MAX(a,b) (a>b)?a:b

注意帶參數的宏定義,宏名 和 (形式參數)之間是不能有空格的,不然會在展開時出錯,假若有空格,就會在調用MAX(a,b) 的時候被替換(a,b) (a>b)?a:b (a,b),因此徹底不是我預想的效果。

宏調用對的過程,其實只是一個符號的替換(在編譯以前),和函數是徹底不一樣的

文件包含

文件包含是將指定文件的內容插入到當前文件之中。使用文件包含,能夠減小程序設計人員的重複勞動,提升程序的開發效率

#include<文件名>

  在系統設定的目錄中進行查找,通常是經過環境變量來進行設定,通常用這種形式包含系統的頭文件

#include"文件名"

  在當前的路徑下進行查找,若是沒有找到再去系統指定的目錄下進行查找,通常用這種形式包含用戶自定義的頭文件

條件編譯

C語言中引入條件編譯主要是爲了在不一樣的狀況下控制不一樣的代碼段被編譯,這樣能夠將針對不一樣狀況的代碼編寫在同一個程序文件中,從而方便程序的維護和移植。同時,使用條件編譯可使目標程序變小,運行速度變快

#if、#else、#elif、#endif命令

#if 常量表達式
    代碼段1
#else
    代碼段2
#endif

若是常量表達式的值爲真(非0),編譯代碼段1,不然編譯代碼段2

#ifdef、#else、#ifndef、#endif命令

#ifdef 宏名
    代碼段1
#else
    代碼段2
#endif

  若是宏名在前面已經定義過,編譯代碼段1,不然編譯代碼段2

相關文章
相關標籤/搜索