)c/c++的預先處理定義 Stringizing Operator (#) Charizing Operator (#@) Token-Pasting Operator (##)

來源:互聯網
上載者:User
c/c++的預先處理定義:
一、Stringizing Operator (#)

在c和c++中數字標誌符#被賦予了新的意義,即字串化操作符。其作用是:將宏定義中的傳入參數名轉換成用一對雙引號括起來
參數名字串。其只能用於有傳入參數的宏定義中,且必須置於宏定義體中的參數名前。
如:
 #define example(instr) printf("the input string is:\t%s\n",#instr)
 #define example1(instr) #instr
當使用該宏定義時:
example(abc); 在編譯時間將會展開成:printf("the input string is:\t%s\n","abc");
string str=example1(abc); 將會展成:string str="abc";

注意:
1。對空格的處理
a。忽略傳入參數名前面和後面的空格。
如:str=example1( abc ); 將會被擴充成 str="abc";
b.當傳入參數名間存在空格時,編譯器將會自動連接各個子字串,用每個子字串中只以一個空格串連,忽略其中多餘一個的空格。
如:str=exapme( abc def); 將會被擴充成 str="abc def";

2。逸出字元
a. 某些形式的傳入參數名中,若存在特殊字元,編譯器會自動為其添加逸出字元號'\'。
如:
string str=example1("escap'\e"); 相當於:str="\"escap\'\\e\"";
b. vc6.0和vc7.0並不能正確的解析所有需要特殊字元的情況。此時會給出錯誤報表:error C2001: 常數中有分行符號。
如:
example1(abc\'); //此處警示 error C2001: 常數中有分行符號

二、Charizing Operator (#@)

字元化操作符。其同樣只能用於有傳入參數的宏定義中,且必須置於宏定義體中的參數名前。作用,將傳的單字元參數名轉換成字元,以一對單引用括起來。
如:
#define exampleChar(inchar) #@inchar
使用該宏定義:
char a=exampleChar(a); 將會被擴充成:char a='b';

注意:
vc6.0和vc7.0中預設的類型轉換中,可以將int截斷成char。因此,參數名中最多不能超過4個字元。
如:
char a=example(abcd) 將會截斷成 a='d'。同時編譯器會給出:warning C4305: “=” : 從“int”到“char”截斷

三、Token-Pasting Operator (##)

##:符號串連操作符。
宏定義中:參數名,即為形參,如#define sum(a,b) (a+b);中a和b均為某一參數的代表符號,即形式參數。
而##的作用則是將宏定義的多個形參成一個實際參數名。
如:
#define exampleNum(n) num##n
int num9=9;
使用:
int num=exampleNum(9); 將會擴充成 int num=num9;

注意:
1.當用##串連形參時,##前後的空格可有可無。
如:#define exampleNum(n) num ## n 相當於 #define exampleNum(n) num##n
2.串連後的實際參數名,必須為實際存在的參數名或是編譯器已知的宏定義。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.