2015-04-02 140 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对象来跟踪何时“可选”参数在检索项目时。

所有可变参数函数都是这样工作的。