不定长参数个数获取

获取不定数目传参个数方法

宏定义

/**@brief Implementation details for NUM_VAR_ARGS */
#define NUM_VA_ARGS_IMPL(_0, _1, _2, _3, _4, _5, _6, _7, _8, _9, N, ...) N

/**@brief Macro to get the number of arguments in a call variadic macro call
 *
 * param[in]    ...     List of arguments
 *
 * @retval  Number of variadic arguments in the argument list
 */
#define NUM_VA_ARGS(...) NUM_VA_ARGS_IMPL(__VA_ARGS__, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)

使用方法

#define LOG_PRINTFI(msg, ...)                                        \
    {                                                                      \
        printf("!!!!!!!Arg %d:%s", NUM_VA_ARGS(msg,##__VA_ARGS__), msg);      \
    }

原理解析

img


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!