C語言預處理

2021-07-31 20:19:28 字數 1803 閱讀 4895

預處理:

系統自動自動呼叫預處理程式對程式中"#"號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。

預定義:

一些預定義符號(常用於除錯)

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