Макросы и переменное количество аргументов - 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:
  .............................................
   
   }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы