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、有引數的巨集的形式引數不是變數,不分配記憶體空間,無需說明資料型別。而函式的形式引數是變數,需要分配記憶體空間,在函式定義時要指明引數的資料型別。
Linux C預處理命令
無引數巨集定義一般形式為 define 標識字串 例 使用無引數巨集計算圓的面積 include stdafx.h define p 3.1415 2 2 int tmain int argc,tchar argv 有引數的巨集類似於有引數的函式,其定義的一般形式為 define 識別符號 形象表 ...
Linux C 預處理命令
c語言標準允許在程式中用乙個識別符號來表示乙個字串,成為巨集。識別符號為巨集名 在編譯預處理時,將程式中所有的巨集名用相應的字串來替換,這個過程稱為巨集替換,巨集分為兩種 無引數的巨集和有引數的巨集。1.無引數的巨集 無引數巨集定義的一般形式為 define 識別符號字串 例如 2.有引數的巨集定義...
Linux C語言預處理命令
c語言的源 中可以包括各種編譯指令,這些指令就稱之為預處理命令。雖然它們實際上不是c語言的一部分,但卻擴充套件了c程式設計的環境,預處理程式和注釋簡化程式開發過程,並且提高程式的可讀性。然而這些命令是在編譯前由預處理程式對原始檔的預處理檔案進行加工。預處理是在c語言編譯的4個階段 預處理 編譯 彙編...