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語言中...