預處理命令

2021-08-17 15:52:16 字數 1983 閱讀 9244

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

1,有參巨集定義

有引數的巨集類似於有引數的函式,其定義的一般形式為:

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

如果有多個形參,像函式引數一樣以逗號隔開。在程式中使用有引數巨集的形式是:

識別符號(實參表)

*定義有引數的巨集的時候,應該注意:

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

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

2,無參巨集定義

無引數巨集定義的一般形式:

#define 識別符號字串

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

知識點 終止巨集定義命令的一般形式:

#define 識別符號

undef是終止巨集定義的特定字,其作用是從該命令開始,該識別符號(巨集名)不再代表相應字串行,即該識別符號的作用範圍到此處結束。

知識點巨集定義與函式的區別

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

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

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

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

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

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

二,檔案包含

1.檔案包含定義

檔案包含是指把指定原始檔的全部內部包含到當前源程式檔案中。

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

#define「檔名」或#define《檔名》

檔案包含命令中的檔名既可以用尖括號,也可以用雙引號括起來,它們的區別在於查詢指定檔案的位置不同。

三,條件編譯

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

條件編譯命令有以下幾種模式

模式一:

#define 識別符號

程式段1

#endif

其含義是:如果沒有定義識別符號,則編譯程式段1。

模式二:

#define 識別符號

程式段1

#else

程式段2

#endif

其含義:如果沒有定義識別符號,就編譯程式段1,否則就編譯程式段2.

模式三:

#ifdef 識別符號

程式段1

#endif

其含義是:如果定義了識別符號,就編譯程式段1,否則就不編譯改程式。

模式四:

#ifdef 識別符號

程式段#else

程式段2

#endif

其含義是:如果定義了識別符號,就編譯程式段1,否則編譯程式段2.

模式五:

#if 表示式

程式段1

#endif

其含義:如果表示式成立,則編譯程式段1,否則不編譯該程式段。

模式六:

#if 表示式

程式段1

#else

程式段2

#endif

其含義是:如果表示式成立,就編譯程式段1,否則編譯程式段2.

預處理命令

和 操作符是和 define 巨集使用的.使用 使在 後的首個引數返回為乙個帶引號的字串.例如,命令 define to string s s將會使編譯器把以下命令 cout to string hello world endl 理解為 cout hello world endl 使用 鏈結 前後的...

預處理命令

我們可以在c源程式中插入傳給編譯程式的各中指令,這些指令被稱為預處理器指令,它們擴充了程式設計的環境。現把常用的預處理命令總結如下 1.預處理程式 按照ansi標準的定義,預處理程式應該處理以下指令 if ifdef ifndef else elif endif define undef line ...

預處理命令

ansi c標準規定可以在c源程式中加入一些 預處理命令 來改進程式設計環境,提高程式設計效率。這些預處理指令都是由ansi c統一規定的,但是它並不是c語言本身的組成部分,不能直接對其進行編譯。c語言和其它高階程式語言的乙個重要區別就是可以使用預處理指令和它的預處理功能。預處理是指由預處理程式負責...