Introduction
想在源文件里定義一個跟行號有關的變量,每次都手動輸入實在是太慢了。本文介紹怎樣使用宏定義來定義與行號有關的變量。
比如:我們想在源碼的第10行定義A_10這種一個整形變量。
用宏定義來完畢使命
在宏定義中,標准C/C++中給出了兩個特殊的操作符:#和##。
#是用於給紅參數加入雙引號;##用於鏈接兩個宏參數。既然能夠連接兩個宏參數,那我們就能夠鏈接一個首字母和行號作為一個總體了!
於是,我們就這樣寫:
#define MM(A) A##__LINE__
int main(){
int MM(C);
}
編譯后發現,我們定義的居然是C__LINE__這個變量。並非我們想要的!為什么呢?
由於編譯器在預處理的時候並沒有把__LINE__展開。而是把它看成了一個總體!怎么辦?
我們能夠通過再定義還有一個宏來先展開行號。然后在作為參數調用MM這個宏。
#define AA(B,C) B##C
#define BB(B,C) AA(B,C)
#define DD(A) BB(A,__LINE__)
int main(){
int DD(V);
}
OK了,我們成功定義了與行號有關的變量了!