Макросы и переменное количество аргументов - C (СИ)
Формулировка задачи:
Доброго дня!
В двух словах, есть в цикле функция принимающая переменное кол-во аргументов, вот и в зависимости от ситуации необходимо ее вызвать с разным кол-вом аргументов на каждой итерации. Можно создать условие if() или switch(), где в зависимости от условия вызывать эту функцию с тем или иным набором аргументов. Но громоздко как-то получается, особенно если аргументов целый состав...
Вопрос, а можно ли сделать как-нибудь по другому? Например через макросы? Чтоб на каждой итерации в зависимости от аргумента макроса подставлялось нужное кол-во аргументов.
#define ARG(a) ????
void fun(int i, ...);
int main() {
for (int i = 1; i < 5; ++i)
fun(ARG(i)); // чтоб вот здесь разворачивалось в нужный список аргументов
// на первой итерации один аргумент, на второй два и так далее
return 0;
}Решение задачи: «Макросы и переменное количество аргументов»
textual
Листинг программы
void fnc(int arg)
{
{
case 0:
web_submit_data("Register",
"Action=https://{HOST}/UrlRegistration/Register",
"Method=POST", "RecContentType=application/json",
"Referer=https://{HOST}/", "Mode=HTML",
ITEMDATA,
"Name=ShortUrl", "Value={short_URL_name}", ENDITEM,
"Name=LongUrl", "Value=http://{long_URL}", ENDITEM,
"Name=Persistent", "Value=false", ENDITEM,
LAST);
break;
case 1:
web_submit_data("Register",
"Action=https://{HOST}/UrlRegistration/Register",
"Method=POST", "RecContentType=application/json",
"Referer=https://{HOST}/", "Mode=HTML",
ITEMDATA,
"Name=ShortUrl", "Value={short_URL_name}", ENDITEM,
"Name=LongUrl", "Value=http://{long_URL}", ENDITEM,
"Name=Persistent", "Value=false", ENDITEM,
LAST,
"Name=ShortUrl", "Value={short_URL_name}", ENDITEM,
"Name=LongUrl", "Value=http://{long_URL}", ENDITEM,
"Name=Persistent", "Value=false", ENDITEM,
LAST);
break;
case 2:
.............................................
}
}