大 C 海拾貝 -- 連接符“ ## ” 和 字符串化操作符 “ # ”

目錄

1. 連接符 ##

2.字符串化操作符 #


1. 連接符 ##

## 被稱爲連接符(concatenator),用來將兩個Token 連接爲一個Token。注意這裏連接的對象是Token 就行,而不一定是宏的變量。在編譯器編譯的時候,它會掃描源碼,將代碼分解爲一個個的Token,Token 可以是C 語言的關鍵字,如int、for、while 等,也可以是用戶自定義的變量,如,a、num、name 等。

例子:

 宏定義: #define LWIP_MEMPOOL(name,num,size,desc)   MEMP_##name,”

 編譯過程遇到代碼:  LWIP_MEMPOOL(Test,num,size,desc)

 編譯器就會自動替換成:MEMP_Test,

2.字符串化操作符 #

# 的功能是將其後面的宏參數進行字符串化操作,意思就是對它所應用的宏變量通過替換後在其左右各加上一個雙引號。

例子:

#define test_print( m,n ) printf( "token" #m " = %d\n", token##n )

int token2 = 2;

test_print( token2,2 );        
test_print( 2,2 );            	
test_print( "str",2 );	
test_print( str,2 );	

#m中的m原封不動的當成了一個字符串!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章