預處理:
系統自動自動呼叫預處理程式對程式中"#"號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。
預定義:
一些預定義符號(常用於除錯)
_file_
正在預編譯的源檔名
_line_
當前行號(只有這個是整數常量,其他是字串常量)
_function_
當前所在函式名
_date_
當前日期
_time_
當前時間
巨集定義:
無參
#define識別符號
字串在對源程式做編譯時,先由預處理程式進行巨集替換,用字串替換識別符號。
注意:1、只是簡單的替換,預處理對它不做任何檢查,如果有錯誤,只能在替換後在編譯時發現。
2、行末不加分號
3、巨集定義的作用域包括從巨集定義開始到源程式結束,如果要終止作用域,額可以用#undef
示例:
#define
mumu wangzhibin
fun1
()
#undef
mumu
fun2
()
//mumu這個巨集定義只在fun1函式內生效,在fun2函式中無效
4、引號內的內容不進行巨集替換
5、巨集定義可以巢狀
帶參
在呼叫中不僅要巨集展開,而且要用實參去替換形參。
巨集定義中的引數:形式引數巨集呼叫中的引數:實際引數
巨集定義:#define
巨集名(形參表)
字串巨集呼叫:巨集名(實參表)
示例:
#definem(
y)y+
3//巨集定義
int
main
()
ps:在一定情況下,可以用巨集定義和巨集呼叫代替函式定義和函式呼叫,因為巨集的執行速度比函式的速度要快。
但要注意會巨集可能帶來的一些***,比如巨集名和形參表之間不能有空格,形參要適當加括號。
總之,使用巨集時,記住一點,只是替換,要考慮替換到源程式後來的影響,注意上下文。
條件編譯
:
形式1:
#ifdef識別符號
程式段1
#else
程式段2
#endif
如果識別符號被#define語句定義過,則編譯程式段1,否則編譯程式段2。(#else可以沒有)
形式2:
#ifndef識別符號
程式段1
#else
程式段2
#endif
如果識別符號未被#define語句定義過,則編譯程式段1,否則編譯程式段2。(#else可以沒有)
形式3:
#if常量表示式
程式段1
#else
程式段2
#endif
如果常量表示式為真
,編譯程式段1,否則編譯程式段2。
(#else可以沒有)
C語言預處理
c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與c 語言中是相通的。下面舉例說...
c語言預處理
預處理可以包含 1 巨集定義指令 2 標頭檔案包括指令 3 條件編譯指令 4 編譯程式可以識別的特殊符號 巨集定義 define undef 檔案包含 include 條件編譯 if ifdef else elif endif等 其他 line error program等 注意事項 1 在c語言中...
C語言 預處理
預處理 下面介紹一些 c c 中幾個不常見卻有用的預編譯和巨集定義。error 語法格式如下 error token sequence 其主要的作用是在編譯的時候輸出編譯錯誤資訊token sequence,從方便程式設計師檢查程式 現的錯誤。例 include stdio.h int main i...