編譯預處理,是指源程式被正式編譯之前所進行的處理工作。由預處理程式實現,負責分析和處理行首以『#』開頭的控制行,包括巨集代換、檔案包含和條件編譯。
巨集定義就是把一長串字串行用乙個簡短的名字去代替,這個名字稱為巨集名,被代替的長串序列就被稱為巨集值。
1. 簡單巨集
1) 定義格式:#define 《巨集名》 《巨集值》
2) 功能:將巨集名代替巨集值
3) 需要注意的問題:
(1) 巨集名一般使用大寫
(2) 如果巨集名過長,可以使用需行符「\」
(3) 巨集值為表示式時,最好用圓括號括起來
(4) 巨集定義可以巢狀
(5) 若巨集名出現在字串中,則字串中的巨集名不作替換。
(6) 巨集取消命令:#undef 《巨集名》
2. 帶引數的巨集
1) 定義格式:#define 《巨集名》 《巨集值(含引數的字串)>
2) 功能:類似於函式
3) 需要注意的問題:
(1) 巨集值中間的引數要用括號括起來。
(2) 當乙個巨集名要在另乙個巨集定義的巨集值中出現時,最好將它的巨集值部分括起來,以避免發生意外。
(3) 帶參巨集與函式的區別
[1] 函式呼叫時先對引數表示式進行計算,把計算的結果作為乙個值去代替形參,而巨集代換時不對引數求值。
[2] 函式的形參和實參的有型別,而巨集的引數沒有型別。
[3] 函式呼叫是在執行時處理的,要占有執行時間,而巨集是在編譯預處理階段處理的,不占有執行時間。因此一些小的、呼叫次數頻繁的函式,最好用帶參的巨集去代替。
1. 一般格式:#include 《檔名》|」檔名」
2. 功能:用指定檔案的乙份拷貝和取代這條預處理。
3. 需要注意的問題
1) <>括起來的檔案,預處理程式會在標準庫標頭檔案中去查詢;」」括起來的檔案,預處理程式會在當前正在編譯的程式所在目錄中查詢。
2) 檔案包含可以巢狀,被包含檔案裡包含的檔案也被包含檔案所包含。
3) 被包含檔案的全域性變數也是包含檔案中的全域性變數。
乙個程式中的所有語句並不一定要全部編譯執行,根據一定的條件可以對其中的一部分進行編譯。能夠控制編譯範圍的指令就是c語言提供的條件編譯指令。
1. #if…#endif形式
1) 一般格式:
#if 《常整數表示式》
《程式段》
#elif
《程式段》
#endif
2) 功能:若常整數表示式的值為真,則編譯程式段。
3) 需要注意的問題
(1) 常整數表示式中只能出現預定於的常量識別符號、整常數、字元常數等。
2. #ifdef…#endif形式
1) 一般格式:
#ifdef 《識別符號》
《程式段》
#endif
2) 功能:如果識別符號用#define定義過,則編譯程式段。
3. #ifndef…#endif形式
1) 一般格式:
#ifndef 《識別符號》
《程式段》
#endif
2) 功能:如果識別符號未被#define定義過,則編譯程式段。
4. 條件編譯的主要用途:
1) 忽略程式的某一部分:
#if 0
《不編譯的程式段》
#endif
2) 幫助程式除錯
1. 字元邏輯運算子
1) 按位與運算子&
2) 按位或運算子|、
3) 按位取反運算子~
4) 按位異或運算子^(相同則為0,相反則為1)
5) 需要注意的問題:
(1) 任何乙個數和它自身的異或永遠是0,而任何乙個數和0的異或的結果是其自身。
(2) 對乙個資料用另乙個資料進行兩次異或操作後,將恢復這個物件原來的值。可用作加密工作。
(3) 按位與運算&用於選取乙個數的某些二進位制位。
(4) 按位異或運算|用於將乙個數指定位置變成1。
(5) 按位異或運算^用於將乙個數的指定位翻轉,其它位不變。
(6) 對兩個長度不等的數進行位運算時,右邊對齊,短的數左邊添0(整數/無符號數),或添1(負數)。
2. 字位移位運算子
《和》1) 呼叫格式:
《數值》 <<(左移位數)| 《數值》 >> (右移動位數)
2) 功能:將數值的二進位制位數,向左或右移動指定位數。
3) 需要注意的問題:
(1) 對於整數或無符號數,左移運算中,若移掉的位中無1,則左移n位後的值是原值的2n
倍。右移運算中,若移掉的位中無1,則右移n位後的值是原值的1/2n倍。
(2) 對於有符號數,在向左移時,得到的結果有可能是正數或負數;在向右移動時,分為邏輯右移和算術右移動,算術右移會保證陣列的正負性不變。
10.4.2 與位運算有關的符合賦值運算子
C語言 第十章檔案編譯
1.預處理 e 進行預處理工作 工作內容 進行預處理 預處理指令 進行巨集替換和標頭檔案匯入或者條件編譯等 去掉注釋內容 不會自動生成檔案 o 可以指定生成的目標檔案 i2.編譯 s 檢查語法錯誤 生成匯程式設計序 工作內容 檢查源 或者經過預處理之後 的語法錯誤 生成匯程式設計序 s3.彙編 其實...
C 程式設計第十章
軟體開發者將被開發的整個業務範圍稱作 問題域 按一下步驟建立物件層。1 將問題域和系統責任作為出發點 2 正確運用抽象原則 3 尋找候選物件的基本方法尋找候選物件的基本方法的主要策略是從問題域 系統邊界和系統責任三方找出可能候選物件。1 考慮問題域中可啟發分析人員發現物件的因素。2 考慮系統邊界可以...
第十章 網路程式設計
1.網路基礎概念 網路程式設計!程式設計 略2.ip協議 ip internet protocol 協議是網際層的主要協議,支援網間互連的資料報通訊。它提供主要功能有 1 無連線資料報傳送 2 資料報路由選擇和差錯控制 3.tcp udp 1 tcp transmission contorl pro...