2012-12-20 75 views
1

Visual C++有类似于__builtin_va_arg_pack的东西吗?MSVC是否有类似__builtin_va_arg_pack的东西?

此内置函数表示内联函数的所有匿名参数。它可用于仅在内联函数,这将是始终 内联,从未编译为一个单独的函数,例如使用 属性((always_inline))或属性((gnu_inline))外部内联的那些功能。它只能作为 传递给其他带有可变参数的函数的最后一个参数。这是 用于写可变参数 函数的小封装内联函数时,使用预处理器宏时不可取。例如:

 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; 
     } 

回答

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; 
    } 
+0

对不起,但这不是我要求的。我知道如何传递可变参数从一个函数采用'va_list'到'...'函数,但是我需要从一个可变参数传递参数到另一个可变参数函数... – szx

+1

如果你需要这个东西除了(v)printf,其中只有变量arg函数存在,但没有采用va_list的替代函数,对于MSVC编译器而言,您并不幸运。 – nos

相关问题