鍏充簬璁板彿綺樿創(chuàng)鎿嶄綔絎?token paste operator): ##
1. 綆鍗曠殑璇達(dá)紝“##”鏄竴縐嶅垎闅旇繛鎺ユ柟寮忥紝瀹冪殑浣滅敤鏄厛鍒嗛殧錛岀劧鍚庤繘琛屽己鍒惰繛鎺?/span>銆?/p>
鍏朵腑錛屽垎闅旂殑浣滅敤綾諱技浜庣┖鏍箋傛垜浠煡閬撳湪鏅氱殑瀹忓畾涔変腑錛?span style="COLOR: #ff0000">棰勫鐞嗗櫒涓鑸妸絀烘牸 鍙﹀涓浜涘垎闅旀爣蹇楁槸錛屽寘鎷搷浣滅錛屾瘮濡?nbsp;+, -, *, /, [,], …錛?/span>鎵浠ュ敖綆′笅闈㈢殑 鑰屽叾寮哄埗榪炴帴鐨勪綔鐢ㄦ槸錛屽幓鎺夊拰鍓嶉潰鐨勫瓧絎︿覆涔嬮棿鐨勭┖鏍鹼紝鑰屾妸涓よ呰繛鎺ヨ搗鏉ャ?/p>
2. 涓懼垪 – 璇曟瘮杈冧笅榪板嚑涓畯瀹氫箟鐨勫尯鍒?/p>
#define A1(name, type) type name_##type##_type 鎴?br> #define A2(name, type) type name##_##type##_type A1(a1, int); /* 絳変環(huán)浜? int name_int_type; */ 瑙i噴錛?br> 1) 鍦ㄧ涓涓畯瀹氫箟涓紝”name”鍜岀涓涓?#8221;_”涔嬮棿錛屼互鍙?qiáng)绗?涓?#8221;_”鍜岀浜屼釜 2) 鑰屽湪絎簩涓畯瀹氫箟涓紝“name”鍜岀涓涓?#8220;_”涔嬮棿涔熻鍒嗛殧浜?jiǎn)锛屾墍浠?br> 棰勫鐞嗗櫒浼?xì)鎶妌ame##_##type##_type瑙i噴鎴?孌碉細(xì)“name”銆?#8220;_”銆?#8220;type” 3) A1鍜孉2鐨勫畾涔変篃鍙互濡備笅錛?br> #define A1(name, type) type name_ ##type ##_type 緇撴灉鏄?# 浼?xì)鎶婂墠闈㈢殑绌烘牸鍘绘帀瀹屾垚寮簶q炴帴錛屽緱鍒板拰涓婇潰緇撴灉鐩稿悓鐨勫畯瀹氫箟 3. 鍏朵粬鐩稿叧 – 鍗曠嫭鐨勪竴涓?nbsp;# 鑷充簬鍗曠嫭涓涓?錛屽垯琛ㄧず 瀵硅繖涓彉閲忔浛鎹㈠悗錛屽啀鍔犲弻寮曞彿寮曡搗鏉ャ傛瘮濡?/p>
#define __stringify_1(x) #x 鎵浠ワ紝瀵逛簬MODULE_DEVICE_TABLE 1) #define MODULE_DEVICE_TABLE(type,name) 寰楀埌 娉ㄦ剰鍒癮lias attribute闇瑕佷竴涓弻寮曞彿錛屾墍浠ュ湪榪欓噷浣跨敤浜?jiǎn)__stringify(name)鏉?br>緇檔ame鍔犱笂鍙屽紩鍙楓傚彟澶栵紝榪樻敞鎰忓埌涓涓閮ㄥ彉閲?#8221;__mod_usb_device_table”琚玜lias 4. 鍒嗘瀽鏂規(guī)硶鍜岄獙璇佹柟寮?nbsp;– 緙栧啓涓涓畝鍗曠殑C紼嬪簭 鐢ㄥ畯瀹氫箟涓涓彉閲忥紝鍚屾椂鐢ㄧ洿鎺ユ柟寮忓畾涔変竴涓浉鍚岀殑鍙橀噺錛岀紪璇戞姤鍛婇噸澶嶅畾涔夛紱
瑙i噴鎴愬垎孌墊爣蹇?/span>錛屽浜庢瘡涓孌靛拰鍓嶉潰姣旇緝錛岀浉鍚岀殑灝辮鏇挎崲銆備絾鏄繖鏍峰仛鐨勭粨鏋滄槸錛?br> 琚浛鎹㈡涔嬮棿瀛樺湪涓浜涚┖鏍箋?span style="COLOR: #ff0000">濡傛灉鎴戜滑涓嶅笇鏈涘嚭鐜拌繖浜涚┖鏍鹼紝灝卞彲浠ラ氳繃娣誨姞涓浜?br> ##鏉ユ浛浠g┖鏍?/span>銆?/p>
瀹忓畾涔夋病鏈夌┖鏍鹼紝浣嗘槸渚濈劧琛ㄨ揪鏈夋剰涔夌殑瀹氫箟錛?nbsp;define add(a, b) a+b
A2(a1, int); /* 絳変環(huán)浜? int a1_int_type; */
”type”涔嬮棿娌℃湁琚垎闅旓紝鎵浠ラ澶勭悊鍣ㄤ細(xì)鎶妌ame_##type##_type瑙i噴鎴?孌碉細(xì)
“name_”銆?#8220;type”銆佷互鍙?#8220;_type”錛岃繖涓棿鍙湁“type”鏄湪瀹忓墠闈㈠嚭鐜拌繃
鐨勶紝鎵浠ュ畠鍙互琚畯鏇挎崲銆?/p>
浠ュ強(qiáng)“_type”錛岃繖鍏墮棿錛屽氨鏈変袱涓彲浠ヨ瀹忔浛鎹簡(jiǎn)銆?/p>
<##鍓嶉潰闅忔剰鍔犱笂涓浜涚┖鏍?gt;
#define A2(name, type) type name ##_ ##type ##_type
閭d箞
__stringify_1(linux) <==> ”linux”
MODULE_GENERIC_TABLE(type##_device,name)
2) #define MODULE_GENERIC_TABLE(gtype,name)
extern const struct gtype##_id __mod_##gtype##_table
__attribute__ ((unused, alias(__stringify(name))))
MODULE_DEVICE_TABLE(usb, products)
/*notes: struct usb_device_id products; */
<==> MODULE_GENERIC_TABLE(usb_device,products)
<==> extern const struct usb_device_id __mod_usb_device_table
__attribute__ ((unused, alias(“products”)))
鍒頒簡(jiǎn)鏈┍鍔ㄤ笓鐢ㄧ殑鐢辯敤鎴瘋嚜瀹氫箟鐨勫彉閲弍roducts<usb_device_id綾誨瀷>銆傝繖涓閮ㄥ彉閲?br>鏄浣曚嬌鐢ㄧ殑錛屾洿澶氱殑淇℃伅璇峰弬鐪嬨妏robe()榪囩▼鍒嗘瀽銆嬨?/p>
鐢ㄥ畯瀹氫箟涓涓彉閲忥紝鐩存帴浣跨敤璇ュ畯瀹氫箟鐨勫彉閲忓悕縐幫紝緙栬瘧閫氳繃涓旇繍琛岀粨鏋滄紜紱