C語言 預處理

2021-10-18 09:09:50 字數 2433 閱讀 5569

5.#error和#pragma預處理命令

6.#和##運算子

c的預處理是在程式被編譯之前執行的,包括將其他檔案包含進正在編譯的檔案,定義符號常量和巨集,條件編譯和有條件的執行預處理命令。預處理命令都以#開頭。

功能:將指定檔案的乙個副本包含到命令所在位置上

形式:#include

#include"filename"

區別:查詢檔案的起始位置不同。

使用引號時:會從待編譯檔案所在的目錄裡開始查詢,一般用於程式設計師自己定義的標頭檔案

使用尖括號:用於標準函式庫的標頭檔案,一般會在預先指定的編譯器和系統目錄中開始查詢

格式:#define indentifier replacement_text

功能:其後出現的所有識別符號(indentifier)會在編譯前被替換為後面的替換文字

p.s.習慣上只用大寫字母和下劃線給符號常量命名

​ 這也是一種巨集,此處拆開只是為了單獨說明,而且它也更常用

​ 得到符號常量的另一途徑:利用關鍵字const進行修飾

巨集 ,是#define預處理命令定義的一種識別符號,巨集的定義可以帶實參,也可以不帶。不帶實參的巨集和上面的符號常量類似;而帶實參的巨集會把實參帶入巨集的替換文字中,進行展開

例子(帶實參):

#define rectangle_area(x,y) ( (x) * (y) )

rectarea =

rectangle_area

(a +

4, b +7)

;//in fact, it will be replaced by:

rectarea =

(a +4)

*(b +7)

;

p.s.巨集可以用#undef撤銷

功能:只對滿足條件的**進行編譯

形式:#if,#ifdef,#ifndef

1)#if

和if,else,else if的使用很像,方法如下:

#if 整型常量表示式1

**塊1

#elif 整型常量表示式2

**塊2

#elif 整型常量表示式3

**塊3

#else

**塊4

#endif

2)#ifdef
#ifdef  巨集名

**塊1

#else

**塊2

#endif

意思是 如果所給出的巨集已經被定義過(即存在),則判定為真,編譯1,否則編譯2

3)#ifndef

#ifndef 巨集名

**塊1

#else

**塊2

#endif

與#ifdef類似,區別在於 巨集名 處的判定是判斷巨集是否未定義,如果未定義,編譯1;否則編譯2

格式:#error tokens

功能:列印出包含命令中指定標記的資訊,具體內容和系統的實現有關。

​ tokens是用空格分隔的乙個字串行

格式:#pragma tokens

功能:執行乙個系統實現中已經定義好的操作,如果沒找到就忽略這個命令

#:#運算子需用在帶實參的巨集中,其運算元就是巨集的實參,它將替換文字中的標記轉換成乙個用引號引起來的字串。

例子:

#define hello(x)  printf("hello," # "\n");

//when we meet"hello(mary)", it become:

printf

("hello,"

"mary"

"\n");

//==

printf

("hello,mary\n"

);

##:用於將兩個標記拼接在一起

例子:

#define example(x,y)  x##y

//in the below code,when meet:

example

(o,k)

//it will be replaced by:

example

(ok)

例子:

#define example(x,y)  x##y

//in the below code,when meet:

example

(o,k)

//it will be replaced by:

example

(ok)

注意:##運算子必須有兩個運算元

C語言預處理

c語言中編譯預處理的三種形式的命令 巨集定義,檔案包含,條件編譯命令。1 巨集定義主要是 define,undef 如下 define pi 3.1415926 不帶引數的巨集定義 define max a,b a b?a b 帶引數的巨集定義 說明 巨集定義在c語言與c 語言中是相通的。下面舉例說...

C語言預處理

預處理 系統自動自動呼叫預處理程式對程式中 號開頭的預處理部分進行處理,處理完畢後可以進城源程式的編譯階段。預定義 一些預定義符號 常用於除錯 file 正在預編譯的源檔名 line 當前行號 只有這個是整數常量,其他是字串常量 function 當前所在函式名 date 當前日期 time 當前時...

c語言預處理

預處理可以包含 1 巨集定義指令 2 標頭檔案包括指令 3 條件編譯指令 4 編譯程式可以識別的特殊符號 巨集定義 define undef 檔案包含 include 條件編譯 if ifdef else elif endif等 其他 line error program等 注意事項 1 在c語言中...