2012-01-09 4 views
0

Можно создать дубликат:
Forward an invocation of a variadic function in CПопутных переменных аргументы makecontext функции

Я хочу передать переменные аргументы makecontext функции следующим образом.

void a(...) 
{ 
.... 
makecontext(&stack, &func, ?, ?); 
.... 
} 

В третьем параметре (?), я должен иметь ряд переменных аргументов, в то время как в следующем ?, я должен иметь все аргументы. Как это может быть сделано?

ответ

2

Нет возможности, чтобы вариационная функция могла знать количество полученных параметров. Эта информация не передается ему каким-либо образом.
Единственный способ - по соглашению, которое вызывающий должен будет уважать.
Два общих соглашения:
1. Одним из первых параметров будет количество параметров.
2. Все параметры являются указателями, последний должен быть NULL.

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

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