MSVC有类似__builtin_va_arg_pack的东西吗?

时间:2012-12-20 12:33:54

标签: c visual-c++ gcc

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

1 个答案:

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