2012-12-20 105 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

相關問題