2015-04-02 138 views
0

我想要一個系統調用添加到FreeBSD 9.3.0 system.And我發現在頭文件/usr/src/sys/sys/systm.h這行:非類型參數

int vsscanf(const char *, char const *, __va_list) __nonnull(1) __nonnull(2); 

我的問題是關於__va_list argument.I在無類型的參數上看到類似的問題,但他們聲明編譯器假定它們爲int,也不再使用。但我知道__va_list不是integer,因此它不是這樣使用的。

+1

也許這是一個宏... – Downvoter 2015-04-02 09:04:45

+0

@Corluk我認爲這可能是。我會研究它並報告。 – user2268997 2015-04-02 09:07:35

+2

[關注該源碼](http://sources.freebsd.org/RELENG_9/src/sys/ia64/include/_types.h),它擴展爲以下任一種:'__builtin_va_list'(一個gcc內置類型)或'char *'(它不適用於可變參數)。查找'va_list'來了解它的功能 – Petesh 2015-04-02 09:08:31

回答

1

那麼它有什麼類型?

__va_list沒有一個類型,它類型。該函數聲明也缺少其他參數的變量名稱。

如果你

int a, b, c; 
sscanf("1 2 3", "%d %d %d", &a, &b, &c); 

通常sscanf創建va_list對象,並調用vsscanfvsscanf然後使用va_list對象來跟蹤何時「可選」參數在檢索項目時。

所有可變參數函數都是這樣工作的。