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...