Linux內(nèi)核中#,##,_ _VA_ARGS_ _的用法 2011-11-13 21:03 連接符 ##(兩個井號) 不知道什么符 #(一個井號) ## 連接符號由兩個井號組成,,其功能是在帶參數(shù)的宏定義中將兩個子串(token)聯(lián)接起來,從而形成一個新的子串,。但它不可以是第一個或者最后一個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元,。具體的定義在編譯原理里有詳盡的解釋 #符是把傳遞過來的參數(shù)當(dāng)成字符串進(jìn)行替代,。 假設(shè)程序中已經(jīng)定義了這樣一個帶參數(shù)的宏: #define PRINT( n ) printf( 'token' #n ' = %d', token##n ) 同時又定義了二個整形變量: int token9 = 9; 現(xiàn)在在主程序中以下面的方式調(diào)用這個宏: PRINT( 9 ); 那么在編譯時,,上面的這句話被擴(kuò)展為: printf( 'token' '9' ' = %d', token9 ); 注意到在這個例子中,PRINT(9);中的這個”9”被原封不動的當(dāng)成了一個字符串,,與”token”連接在了一起,從而成為了token9,。而#n也被”9”所替代,。 可想而知,,上面程序運(yùn)行的結(jié)果就是在屏幕上打印出token9=9 還有點(diǎn)不明白? 再來一個例子: #define PRINT( n ) printf( 'token' #n ' = %d', game##n ) int token9 = 9; int game9 = 99; 調(diào)用: |
|