如何将__VA_ARGS中的参数传递给2d字符数组?

时间:2016-02-25 08:17:14

标签: c macros

我需要将__VA_ARGS的结果传递给函数,然后我需要将每个参数的字符串传递给2d字符数组。

1 个答案:

答案 0 :(得分:2)

如果你在C99以下,你可以使用compound literals

#include <stdio.h>

#define MACRO(...) func( \
    sizeof((char *[]){__VA_ARGS__}) / sizeof(char *), \
    (char *[]){__VA_ARGS__} \
)

void func(size_t n, char **p)
{
    size_t i;

    for (i = 0; i < n; i++) {
        printf("%s\n", p[i]);
    }
}

int main(void)
{
    MACRO("abc", "def", "ghi");
    return 0;
}

请注意__VA_ARGS__被评估两次以获得使用sizeof的元素数量,作为替代方案,您可以发送NULL作为最后一个参数(sentinel):

#include <stdio.h>

#define macro(...) func((char *[]){__VA_ARGS__, NULL})

void func(char **p)
{
    while (*p != NULL) {
        printf("%s\n", *p);
        p++;
    }
}

int main(void)
{
    macro("abc", "def", "ghi");
    return 0;
}