zoukankan      html  css  js  c++  java
  • Linux驱动开发——__stringify

    在Linux内核中有一个宏__stringify,在include/linux/stringify.h定义如下:

    #ifndef __LINUX_STRINGIFY_H
    #define __LINUX_STRINGIFY_H
    
    /* Indirect stringification.  Doing two levels allows the parameter to be a
     * macro itself.  For example, compile with -DFOO=bar, __stringify(FOO)
     * converts to "bar".
     */
    
    #define __stringify_1(x...)    #x
    #define __stringify(x...)    __stringify_1(x)
    
    #endif    /* !__LINUX_STRINGIFY_H */

    其作用实际上就是 把  x 直接转换为字符串。其返回值就是字符串,而不是变量名。

    用法1:

       #define __ATTR(_name,_mode,_show,_store) { /
         .attr = {.name = __stringify(_name), .mode = _mode }, /
         .show = _show,     /
         .store = _store,     /
        }

    假设我们这样使用  __ATTR:   

                           __ATTR(var_name, 777,  show_function, store_function)

      那么,实际上 复制给  .attr.name 的值是 "var_name" ,而不是var_name 变量所代表的值。

    用法2:将枚举类型转换为字符串

    #define WCD_MBHC_STRINGIFY(s)  __stringify(s)
    enum wcd_notify_event {
        WCD_EVENT_INVALID,
        /* events for micbias ON and OFF */
        WCD_EVENT_PRE_MICBIAS_2_OFF,
        WCD_EVENT_POST_MICBIAS_2_OFF,
        WCD_EVENT_PRE_MICBIAS_2_ON,
        WCD_EVENT_POST_MICBIAS_2_ON,
    static const char *wcd_mbhc_get_event_string(int event)
    {
        switch (event) {
        case WCD_EVENT_PRE_MICBIAS_2_OFF:
            return WCD_MBHC_STRINGIFY(WCD_EVENT_PRE_MICBIAS_2_OFF);
        case WCD_EVENT_POST_MICBIAS_2_OFF:
            return WCD_MBHC_STRINGIFY(WCD_EVENT_POST_MICBIAS_2_OFF);
        case WCD_EVENT_PRE_MICBIAS_2_ON:
            return WCD_MBHC_STRINGIFY(WCD_EVENT_PRE_MICBIAS_2_ON);
  • 相关阅读:
    如何打开指定文件所在的文件夹并选中文件
    不阻止多线程中控件跨线程访问
    .NET使用并行计算 提高执行效率
    关于线程安全中Lock的一些说明
    多线程中调用多参数的方法
    C#把汉字转换成拼音
    跨窗体Invoke时使用匿名方法或者带参方法
    给MP3音乐文件写ID3信息和专辑封面
    用Python作GIS:菜谱篇
    python中对象self的由来
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/5788743.html
Copyright © 2011-2022 走看看