Макросы и переменное количество аргументов - 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: ............................................. } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д