首页 > 解决方案 > clang-format 通过宏格式化函数声明

问题描述

我有一组文件,其中使用宏定义函数。简化版如下:

#define DECL_GPO(prefix, name, port, pin, def) \
    static inline void prefix##_Set_##name (uint32_t v) \
    { \
        if(0!=v) { \
            GPIO##port->DR_SET = (1 << pin); \
        } else { \
            GPIO##port->DR_CLEAR = (1 << pin); \
        } \
    }

#define DECL_DigOut(name, port, pin, def)   DECL_GPO(DigOut, name, port, pin, def)

/* intentionally badly formatted */
DECL_DigOut(LED0, 4, 23, 0)      DECL_DigOut(LED1, 4, 25, 0)
DECL_DigOut(MAIN_HW0, 3, 14, 0)
        DECL_DigOut(MAIN_HW1, 3, 15, 0)
   DECL_DigOut(MAIN_HW2, 3, 16, 0)

.clang-format的是这个

尝试格式化上面的文件,我得到:

#define DECL_GPO(prefix, name, port, pin, def)                                                                         \
    static inline void prefix##_Set_##name(uint32_t v)                                                                 \
    {                                                                                                                  \
        if (0 != v)                                                                                                    \
        {                                                                                                              \
            GPIO##port->DR_SET = (1 << pin);                                                                           \
        }                                                                                                              \
        else                                                                                                           \
        {                                                                                                              \
            GPIO##port->DR_CLEAR = (1 << pin);                                                                         \
        }                                                                                                              \
    }

#define DECL_DigOut(name, port, pin, def) DECL_GPO(DigOut, name, port, pin, def)

DECL_DigOut(LED0, 4, 23, 0) DECL_DigOut(LED1, 4, 25, 0) DECL_DigOut(MAIN_HW0, 3, 14, 0) DECL_DigOut(MAIN_HW1, 3, 15, 0)
    DECL_DigOut(MAIN_HW2, 3, 16, 0)

但是,我希望函数声明列表DECL_DigOut是每行一个。

如何使用 clang 格式实现这种行为?

标签: cclang-format

解决方案


推荐阅读