- 相關(guān)推薦
C語(yǔ)言中用宏怎么構(gòu)造標(biāo)識(shí)符
導(dǎo)語(yǔ);標(biāo)示符(IDentifier)是指用來(lái)標(biāo)識(shí)某個(gè)實(shí)體的一個(gè)符號(hào)。在不同的應(yīng)用環(huán)境下有不同的含義。那么用宏怎么構(gòu)造標(biāo)識(shí)符呢?一起來(lái)學(xué)習(xí)下吧:
怎么用宏來(lái)構(gòu)造標(biāo)識(shí)符,需要引用符號(hào)粘貼操作符——##,“##”的作用是將右邊“操作數(shù)”追加到左邊“操作數(shù)”,將最后的符號(hào)標(biāo)識(shí)作為變量的標(biāo)識(shí)符,不過(guò)最后的標(biāo)識(shí)符要符合標(biāo)識(shí)符的規(guī)定。
例如:
#define PASTE(a, b) a##b
應(yīng)用:
char *PASTE(te, st) = “Hello, world!”;
printf(“%s ”, test);
又如:
#define PASTE(a, b) char *a##b
應(yīng)用:
PASTE(te, st) = “Hello, world!”;//te、逗號(hào)、空格、st,逗號(hào)是用來(lái)隔開標(biāo)識(shí)符的,空格會(huì)被自動(dòng)忽略掉
printf(“%s ”, test);
上面兩個(gè)例子最終都會(huì)構(gòu)造出test標(biāo)識(shí)符。
又Linux kernel的sysfs中,DEVICE_ATTR、DRIVER_ATTR、CLASS_ATTR、BUS_ATTR的標(biāo)識(shí)符定義也用了“##”粘貼操作符,如下:
#define BUS_ATTR(_name, _mode, _show,_store)
struct bus_attribute bus_attr_##_name =__ATTR(_name, _mode, _show, _store)
#define CLASS_ATTR(_name, _mode, _show,_store)
struct class_attributeclass_attr_##_name = __ATTR(_name, _mode, _show, _store)
#define DRIVER_ATTR(_name, _mode, _show,_store)
struct driver_attributedriver_attr_##_name =
__ATTR(_name, _mode, _show, _store)
#define DEVICE_ATTR(_name, _mode, _show,_store)
struct device_attribute dev_attr_##_name= __ATTR(_name, _mode, _show, _store)
【C語(yǔ)言中用宏怎么構(gòu)造標(biāo)識(shí)符】相關(guān)文章:
C語(yǔ)言宏定義07-01
C語(yǔ)言入門知識(shí):標(biāo)識(shí)符08-23
C語(yǔ)言的assert斷言宏10-21
C語(yǔ)言宏定義技巧09-03
C語(yǔ)言的宏定義分析09-10
C 語(yǔ)言中宏的使用08-02
C語(yǔ)言預(yù)定義宏用法10-06