Visual C ++是否有类似于__builtin_va_arg_pack
的内容?
此内置函数表示内联的所有匿名参数 功能。它只能用于内联函数 内联,永远不会编译为单独的函数,例如那些使用 属性(( always_inline ))或属性(( gnu_inline ))extern内联函数。它必须只作为传递 带有变量参数的其他函数的最后一个参数。这是 用于为变量参数编写小包装内联 函数,当使用预处理器宏时是不合需要的。例如:
extern int myprintf (FILE *f, const char *format, ...); extern inline __attribute__ ((__gnu_inline__)) int myprintf (FILE *f, const char *format, ...) { int r = fprintf (f, "myprintf: "); if (r < 0) return r; int s = fprintf (f, format, __builtin_va_arg_pack ()); if (s < 0) return s; return r + s; }
答案 0 :(得分:2)
不是我知道的。但是这里不需要使用gcc扩展名,而是使用vfprintf:
int myprintf (FILE *f, const char *format, ...)
{
va_list ap;
va_start(ap, format);
int r = fprintf (f, "myprintf: ");
if (r < 0)
return r;
int s = vfprintf (f, format, ap);
va_end(ap);
if (s < 0)
return s;
return r + s;
}