Как передать все параметры из функции bar в функцию foo? Изменить сигнатуру функции foo нельзя.
void foo(char* args, ...);
void bar(char* args, ...)
{
...
foo( ??? );
...
}
Здравствуйте, Ушастый Ёж, Вы писали:
УЁ>Как передать все параметры из функции bar в функцию foo? Изменить сигнатуру функции foo нельзя.
УЁ>УЁ>void foo(char* args, ...);
УЁ>void bar(char* args, ...)
УЁ>{
УЁ> ...
УЁ> foo( ??? );
УЁ> ...
УЁ>}
УЁ>
100% не дам, но имхо читать документацию по следующим функциям
type va_arg(
va_list arg_ptr,
type
);
void va_end(
va_list arg_ptr
);
void va_start(
va_list arg_ptr
); // (UNIX version)
void va_start(
va_list arg_ptr,
prev_param
); // (ANSI version)
и получится нечто вроде :
void foo(char* args, ...);
void bar(char* args, ...)
{
...
va_list arglist;
va_start(arglist, format);
foo( arglist );
va_end(arglist);
...
}
Код написан на коленке, с явным нежеланием читать документацию, но что-то похоее должно быть, имхо
Здравствуйте, dip_2000, Вы писали:
_>и получится нечто вроде :
_>_>void foo(char* args, ...);
_>void bar(char* args, ...)
_>{
_> ...
_>va_list arglist;
_>va_start(arglist, format);
_> foo( arglist );
_>va_end(arglist);
_> ...
_>}
_>
_>Код написан на коленке, с явным нежеланием читать документацию, но что-то похоее должно быть, имхо
Не получится, ибо стэк будет другой.
Необходима версия функции foo() в виде
void foo(char* args, va_list argList);
Здравствуйте, _Obelisk_, Вы писали:
_O_>Не получится, ибо стэк будет другой.
_O_>Необходима версия функции foo() в виде
_O_>_O_>void foo(char* args, va_list argList);
_O_>
рискну предположить что нужна не foo(), а bar() с такой сигнатурой. А это под условие задачи подходит вобщем то...
С foo() точно все ок.
Здравствуйте, Ушастый Ёж, Вы писали:
УЁ>Как передать все параметры из функции bar в функцию foo? Изменить сигнатуру функции foo нельзя.
УЁ>УЁ>void foo(char* args, ...);
УЁ>void bar(char* args, ...)
УЁ>{
УЁ> ...
УЁ> foo( ??? );
УЁ> ...
УЁ>}
УЁ>
Если вызов foo идет в конце bar, можно решить так:
void bar(char* args, ...)
{
...
_asm jmp foo;
}
Конечно, это решение непортабельно.
По-другому, требуется изменение сигнатуры foo
Здравствуйте, R.O. Prokopiev, Вы писали:
ROP>ROP>Если вызов foo идет в конце bar, можно решить так:
ROP>void bar(char* args, ...)
ROP>{
ROP> ...
ROP> _asm jmp foo;
ROP>}
ROP>
ROP>Конечно, это решение непортабельно.
Решение не только не портабельно, но и не имеет отношения к разделу в котором был задан вопрос
Здравствуйте, dip_2000, Вы писали:
_>и получится нечто вроде :
_>_>void foo(char* args, ...);
_>void bar(char* args, ...)
_>{
_> ...
_>va_list arglist;
_>va_start(arglist, format);
_> foo( arglist );
_>va_end(arglist);
_> ...
_>}
_>
_>Код написан на коленке, с явным нежеланием читать документацию, но что-то похоее должно быть, имхо
foo( arglist );
кладет в стек
указатель на "массив" аргументов.
Сигнатура foo требует передачи этого "массива" по значению.
Слушайте радио RT FM.
Переменное число аргументов не так просто в стек положить.
Прошу снять минусы.