您好,登錄后才能下訂單哦!
#ifndef __GNUC__ #error 編譯器為g++,windows下,好像沒(méi)有把##生成的新字符串當(dāng)成一個(gè)宏處理 #endif #define conn(x,y) x#y // x必須是一個(gè)字符串,使用時(shí),conn("2",3),而不能是conn(2,3),3可以是任何類(lèi)型的字符串 // ## 有兩種用法,一種是字符串連接,另一種是把連接生成的字符串當(dāng)成一個(gè)新的宏 // 新宏必須存在 // 用##連接中參數(shù)中包含已定義的宏時(shí),宏不會(huì)展開(kāi) #define STR test #define hello(x,y,z) x##y##z // 第一種用法 cout<<hello(1,2,3)<<endl; // 輸出 123 // 第二種用法 #define xyz 333 cout<<hello(x,y,z)<<endl; // 即xyz這個(gè)宏必須存在,然后輸出333 cout<<hello(STR,y,z)<<endl; // STR不會(huì)展開(kāi)
// 測(cè)試程序 #include <iostream> using namespace std; #ifndef __GNUC__ #error 編譯器為g++,windows下,好像沒(méi)有把##生成的新字符串當(dāng)成一個(gè)宏處理 #endif #define conn(x,y) x#y // x必須是一個(gè)字符串,使用時(shí),conn("2",3),而不能是conn(2,3),3可以是任何類(lèi)型的字符串 // ## 有兩種用法,一種是字符串連接,另一種是把連接生成的字符串當(dāng)成一個(gè)新的宏 // 新宏必須存在 // 用##連接中參數(shù)中包含已定義的宏時(shí),宏不會(huì)展開(kāi) // ##連接時(shí),要么全是數(shù)字,要么,連接生成的字符串必須是已經(jīng)定義的宏 #define hello(x,y,z) x##y##z int main() { cout<<conn("2",3)<<endl; // 輸出 23 // 第一種用法 cout<<hello(1,2,3)<<endl; // 輸出 123 // cout<<hello(a,2,3)<<endl; // 會(huì)報(bào)錯(cuò),看起來(lái),g++只支持第二種用法 // 第二種用法 #define xyz 333 cout<<hello(x,y,z)<<endl; // 即xyz這個(gè)宏必須存在,然后輸出333 //cout<<hello(STR,y,z)<endl; // STR沒(méi)有展開(kāi) return 0; }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。