巨集定義中的 號

2021-08-21 19:47:31 字數 1004 閱讀 3797

一、#

名稱:字串化操作符

其作:將巨集定義中的傳入引數名轉換成用一對雙引號括起來引數名字串。

使用條件:只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前

舉例:#define example1(instr) #instr

string str=example1(abc); 將會展成:string str="abc";

注意:對空格的處理

a、忽略傳入引數名前面和後面的空格。

如:str=example1(   abc ); 將會被擴充套件成 str="abc";

b、當傳入引數名間存在空格時,編譯器將會自動連線各個子字串,用每個子字串中只以乙個空格連線,忽略其中多餘乙個的空格。

如:str=exapme1( abc    def); 將會被擴充套件成 str="abc def";

二、##

名稱:符號連線操作符

作用:將巨集定義的多個形參名連線成乙個實際引數名

使用條件:只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前

舉例:#define examplenum(n) num##n

int num=examplenum(9); 將會擴充套件成 int num=num9;

注意:1、當用##連線形參時,##前後的空格可有可無。

如:#define examplenum(n) num ## n 相當於 #define examplenum(n) num##n

2、連線後的實際引數名,必須為實際存在的引數名或是編譯器已知的巨集定義

三、@#

名稱:字元化操作符

作用:將傳入的單字元引數名轉換成字元,以一對單引用括起來。

使用條件:只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前。

舉例:#define makechar(x) @#x

a = makechar(b); 展開後變成了:a= 'b';

四、\名稱:行繼續操作符

注意:換行不能切斷單詞,只能在空格的地方進行。

巨集定義 號用法

define s x 自動給引數x轉換為 x 轉換為字串 這裡的語言符號不一定是巨集的變數 include define s x system x void main c語言中 被稱為連線符 它是一種預處理運算子,用來把兩個語言符號 token 組合成單個語言符號 這裡的語言符號不一定是巨集的變數。...

巨集定義中的

劉詩慧rubby的日誌 1 stringizing 字串化操作符 作用 將巨集定義中的傳入引數名轉換成用一對雙引號括起來引數名字串。其只能用於有傳入引數的巨集定 義中,且必須置於巨集定義體中的引數名前。如 define example instr printf the input string is...

巨集定義中的

以這個巨集定義為例 define err exit m do while 0 其中的 是怎麼回事?1 對於有引數的巨集定義,巨集定義時,在巨集名與帶引數的括號之間不應加空格,否則將空格以後的字元都作為替代字串的一部分。2 帶引數的巨集定義只是進行簡單的字元替換,巨集展開則是在編譯前進行的,在展開時並...