2015-04-02 2 views
0

Я пытаюсь добавить системный вызов к FreeBSD 9.3.0 system.and я нашел эту строку в файле заголовка /usr/src/sys/sys/systm.h:Нетипизированные Аргументы в заголовочных файлах C

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

Мой вопрос о __va_list argument.I были замечены аналогичные вопросы по нетипизированным аргументам, но они заявили, что они приняты в качестве int компилятором, а также больше не используются. Но я знаю, что __va_list не является integer и не используется как таковой. Так какой у него тип?

+1

Может быть, это макрос ... – Downvoter

+0

@Corluk Я думаю, что это, вероятно, есть. Я изучу его и расскажу. – user2268997

+2

[Следуйте за исходным кодом] (http://sources.freebsd.org/RELENG_9/src/sys/ia64/include/_types.h), и он расширяется до одного из следующих: '__builtin_va_list' (встроенный тип gcc) или 'char *' (что не работает для varargs). Посмотрите 'va_list' для получения подробной информации о том, что он делает – Petesh

ответ

1

Какой у него тип?

__va_list не имеет типа, он является типа. Объявление этой функции не содержит имен переменных для других параметров.

Если вы

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

Обычно sscanf создает va_list объект и вызывает vsscanf. vsscanf затем использует объект va_list, чтобы отслеживать, где «необязательные» аргументы, когда элементы извлекаются.

Все переменные функции аргументов работают следующим образом.

Смежные вопросы