LINUX.ORG.RU

Вопрос по параметрам функции типа ааа(...) { }


0

0

Есть 2 простых вопроса по вытаскиванию параметров из функции типа aaa(...) { }. Если пользоваться макрами va_list, va_start, va_arg и va_end, то что указывать в va_start, если нет ни одного явного аргумента? И можно-ли как-то узнать число параметров, или последним должен быть какой-то делимитер (в случае, например, когда все параметры типа int)? Заранее благодарен.

anonymous

Передавай явным параметром число аргументов.

Если элементы одного типа, то, наверно, лучше передавать в функцию массив.

anonymous
()

агли хак:


#include <stdio.h>
#include <stdarg.h>

int xvs(char *fmt, ...)
{
return vprintf(fmt, (va_list)(&fmt+1));
}


int main(int argc, char **argv)
{
return xvs("%s", "Hello World!\n")?0:1?0:1;
}

anonymous
()

по моему стандарт Си это не предусматривает.

Даже эллипсис там определяется как , ...

А про отдельный токен ... нигде нет речи.

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Спасибо. Понял, что всего две возможности - задавать число параметров в первом аргументе либо определить функцию как ааа(int par1 ...) и заканчивать заведомо "неправильным" числом (массив не подходит - все для юзеров, а им массив создавать в лом), если заранее обговорить. Болячка эта от компилятора - в некоторых в стек заносится число параметоров, а в С++ обошлись без этого.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.