第七章 預處理命令

2021-08-17 15:50:07 字數 2610 閱讀 6192

1、巨集定義

定義:c語言標準中允許程式用乙個識別符號來表示乙個字串,稱為巨集。在編譯預處理時,將程式中所有的巨集名用相應的字串來替換,這個過程稱為巨集替換。

注:a)      

巨集定義是由源程式中的巨集定義命令完成的。巨集代替是由預處理程式自動完成的。

b)     

巨集定義和其他編譯處理命令不是以分號結尾的。

c)      

巨集定義必須寫在函式之外,其作用域為巨集定義命令起到源程式結束。如要終止其作用域可使用

#undef

命令d)     

巨集定義允許巢狀,在巨集定義的字串中可以使用已經定義的巨集名。

e)      習慣上巨集名用大寫字母表示,以便於變數區別。但也允許用小寫字母。

f)       可以用巨集定義表示資料型別,使書寫方便。

g)      巨集分為有引數的巨集和無引數的巨集

(1)無引數的巨集

#define 識別符號 字串「#

代表本行是編譯預處理命令」,

define

例:

巨集定義允許巢狀:

(2)有引數的巨集

#define 識別符號(形參表)字串

注意:a)      

程式中使用有參巨集數的形式是:識別符號(實參表)。

b)     

如果有多個形參,像函式引數一樣以逗號隔開。

c)      

巨集名與形參表的圓括號之間不能有空格,否則會導致錯誤

d)     

在巨集定義中,字串內的形式引數最好用括號括起來,以避免錯誤。

e)      

在帶參巨集中,形參和實參只是符號代換,不存在值傳遞。

f)       

在巨集定義中的形參是識別符號,而巨集呼叫中的實參可以是表示式

例:

2.檔案包含

檔案包含命令的一般形式為

:#include」檔名」 或 #include《檔名》

檔案包含預處理命令

#include

的作用是使乙個原始檔可以將另乙個原始檔的全部內容包含進來,把指定的檔案插入該命令列位置取代該命令列,從而把指定的檔案和當前的源程式檔案連成乙個原始檔。

注意:a)      

包含命令中的檔名可以用雙引號括起來,也可以用尖括號,例如:

#include」stdio.h」

#include

b)     

乙個include

命令只能制定乙個被包含檔案,若有多個檔案要包含,則需使用多個

include

命令。c)      

檔案包含允許巢狀,即在乙個被包含的檔案

中又可以包含另乙個檔案。

3、條件編譯

條件編譯是指在特定的條件下,對滿足條件和不滿足條件的情況分別進行處理——滿足時編譯某些語句,不滿足時編譯另一些語句。

條件編譯常用於程式的移植等方面,與系統編譯環境相關。在編譯前先對系統環境進行判斷,在進行相應的語句編譯。

條件編譯有以下幾種模式

模式一:如果沒有定義識別符號,則編譯程式段1

#ifndef

識別符號 程式段

1 #endif

模式二:如果沒有定義識別符號,就編譯程式段1,否則就編譯程式段2。

#ifndef

識別符號 程式段

1 #else

程式段#endif

模式三:如果定義了識別符號,就編譯程式段1,否則就不編譯該程式段

#ifdef

識別符號 程式段

1 #endif

模式四:如果定義了識別符號,就編譯程式段1,否則就編譯程式段2。

#ifdef

識別符號 程式段

1 #else

程式段2 #endif

模式五:如果表示式成立,就編譯程式段1,否則就不編譯該程式段

#if

識別符號 程式段

1 #endif

模式六:如果表示式成立,就編譯程式段1,否則就編譯程式段2。

#if

識別符號 程式段

1 #else

程式段2 #endif

巨集定義與函式的區別

1、巨集定義只是對字串進行簡單替換,而函式呼叫則是按程式的含義來替換形式引數

2、巨集定義只能用於簡單的單行語句替換,而函式可用於複雜運算

3,巨集定義只占用編譯時間,不占用執行時間,執行速度快,而函式呼叫、引數的傳遞等,都要占用記憶體開銷。

4、巨集定義在編譯時展開,多次使用會讓源程式增大,而函式呼叫不管多少次總占用相同的源程式空間

5、巨集定義的作用範圍從定義點開始,到程式原始檔的末尾或使用#undef取消定義之前。

6、有引數的巨集的形式引數不是變數,不分配記憶體空間,無需說明資料型別。而函式的形式引數是變數,需要分配記憶體空間,在函式定義時要指明引數的資料型別。

此**在vs2010中編寫

python第七章 python教程(第七章)

字典和集合 字典是python中唯一,乙個對映型別 如何建立乙個字典,如下 dict dict 滲透 網路安全 怎麼理解字典呢?現實生活中的字典可以通過首字母進行查詢要查詢的漢子,python也可以這樣理解,通過 前的元素查詢到冒號後的元素。為什麼說字典是唯一乙個對映型別呢?看圖。對映型別區別與序列...

第七章 錯誤處理

不使用錯誤碼,使用異常。裡面有個例子,測試驅動開發的。先寫測試用例,異常測試的。然後寫出佔位 再跑測試用例,通不過,修改佔位 測試通 過,然後重構 重構後測試用例 正常跑過,那麼重構成功。自定義異常類 將第三方api進行打包處理。其實就是對第三方api進行封裝處理,這樣也減少了對它的依賴。別返回nu...

第七章 錯誤處理

test expected storageexception.class 單元測試,檢測實現丟擲的異常 public void retrievesectionshouldthrowoninvalidfilename 部分實現功能,再在try塊中新增功能 public listretrievesect...