C語言中用宏怎麼構造標識符
導語;標示符(IDentifier)是指用來標識某個實體的一個符號。在不同的應用環境下有不同的含義。那麼用宏怎麼構造標識符呢?一起來學習下吧:
怎麼用宏來構造標識符,需要引用符號粘貼操作符——##,“##”的作用是將右邊“操作數”追加到左邊“操作數”,將最後的符號標識作為變量的.標識符,不過最後的標識符要符合標識符的規定。
例如:
#define PASTE(a, b) a##b
應用:
char *PASTE(te, st) = “Hello, world!”;
printf(“%s”, test);
又如:
#define PASTE(a, b) char *a##b
應用:
PASTE(te, st) = “Hello, world!”;//te、逗號、空格、st,逗號是用來隔開標識符的,空格會被自動忽略掉
printf(“%s”, test);
上面兩個例子最終都會構造出test標識符。
又Linux kernel的sysfs中,DEVICE_ATTR、DRIVER_ATTR、CLASS_ATTR、BUS_ATTR的標識符定義也用了“##”粘貼操作符,如下:
#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)