替諾福韋二代對乙肝病毒表面抗原轉(zhuǎn)陰或滴度下降在20%以上,價格便宜,印度直由。
c語言的 _##name意思希望能解答下
替諾福韋二代對乙肝病毒表面抗原轉(zhuǎn)陰或滴度下降在20%以上,價格便宜,印度直由。
##用法比較特殊,表示連接起來組成一個新的變量.
## 連接符號由兩個井號組成,其功能是在帶參數(shù)的宏定義中將兩個子串(token)聯(lián)接起來,從而形成一個新的子串。但它不可以是第一個或者最后一個子串。所謂的子串(token)就是指編譯器能夠識別的最小語法單元。簡單的說,“##”是一種分隔連接方式,它的作用是先分隔,然后進(jìn)行強(qiáng)制連接。其中,分隔的作用類似于空格。我們知道在普通的宏定義中,預(yù)處理器一般把空格解釋成分段標(biāo)志,對于每一段和前面比較,相同的就被替換。但是這樣做的結(jié)果是,被替換段之間存在一些空格。如果我們不希望出現(xiàn)這些空格,就可以通過添加一些 ##來替代空格。舉列 – 試比較下述幾個宏定義的區(qū)別 #define A1(name, type)type name_##type##_type 或 #define A2(name, type)type name##_##type##_type A1(a1, int); A2(a1, int); 解釋:1) 在第一個宏定義中,”name”和第一個”_”之間,以及第2個”_”和第二個 ”type”之間沒有被分隔,所以預(yù)處理器會把name_##type##_type解釋成3段:“name_”、“type”、以及“_type”,這中間只有“type”是在宏前面出現(xiàn)過的,所以它可以被宏替換。2) 而在第二個宏定義中,“name”和第一個“_”之間也被分隔了,所以預(yù)處理器會把name##_##type##_type解釋成4段:“name”、“_”、“type”以及“_type”,這其間,就有兩個可以被宏替換了。3) A1和A2的定義也可以如下: #define A1(name, type)type name_##type ##_type<##前面隨意加上一些空格> #define A2(name, type)type name ##_ ##type ##_type結(jié)果是## 會把前面的空格去掉完成強(qiáng)連接,得到和上面結(jié)果相同的宏定義?;蛟俦热?define LINK_MULTIPLE(a,b,c,d) a##_##b##_##c##_##dtypedef struct _record_type LINK_MULTIPLE(name,company,position,salary);// 這里這個語句將展開為:// typedef struct _record_type name_company_position_salary; 詳細(xì)使用方法,可以參考如下博客內(nèi)容: