我需要将__VA_ARGS的结果传递给函数,然后我需要将每个参数的字符串传递给2d字符数组。
答案 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;
}