LINUX.ORG.RU

Чайниковский вопрос про с и функции


0

0

Здравствуйте.

А в с правда нет перегрузки функций и значения по-умолчанию у аргументов? А если я создаю функцию с переменным числом параметров, то мне никак не узнать количество этих переменных параметров, не передав их в функцию?

И, млин, как искать в гугле что-либо по c? Вечно c++ вылазит, -c++ не помогает.

перегрузки функций правда нет, количество фактических аргументов функции можно узнать через va_start, va_arg, va_list.

гуглить по словам plain c можно пробовать

anonymous
()
Ответ на: комментарий от anonymous

> количество фактических аргументов функции можно узнать через va_start, va_arg, va_list.

Нельзя узнать фактическое количество аргументов. Только явно передать.

P.S. Вместо перегрузки функций можно использовать указатели на функции. Ясен перец, что функции из стандартных библиотек так не перегрузишь.

anonymous
()
Ответ на: комментарий от anonymous

> Нельзя узнать фактическое количество аргументов. Только явно передать.

точно, я ошибся

anonymous
()
Ответ на: комментарий от anonymous

Если вовремя не остановишься, то очередной va_arg выдаст тебе сегфолт... ну это скорее всего, хуже будет если не выдаст и ты по каким либо другим причинам выйдешь из цикла обработки парамов. Вот здесь будешь потом репу чесать, почему у тебя херня с парамами творится :)

Deleted
()
Ответ на: комментарий от anonymous

>P.S. Вместо перегрузки функций можно использовать указатели на функции. Ясен перец, что функции из стандартных библиотек так не перегрузишь.

Нууу, быть может через LD_PRELOAD разве что :). Но это уже грязный хак.

Deleted
()

> то мне никак не узнать количество этих переменных параметров, не передав их в функцию?

я делал обвязку
#define my_func(arg, ...) my_func_(arg, ##__VA_ARGS__, NULL)

то есть после всего списка аргументов ставил какой-нибудь отличительный аргумент (здесь NULL) и уже в функции my_func_ перебирал va_arg пока он не встретится.

BreadFan ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.