Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Просто Саша
24 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 346
Завершенные тесты: 2
1

Функции с переменным числом аргументов

28.11.2017, 19:35. Просмотров 156. Ответов 13
Метки нет (Все метки)

Ребята, подскажите пожалуйста, где можно обстоятельно и подробно прочитать про использовании в C++ функций с несколькими аргументами.
Интересуют такие штуки, как va_list, va_start, va_end и тому подобное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2017, 19:35
Ответы с готовыми решениями:

Функции с переменным числом аргументов
на пример sum(2,56,515,-23.65,548)?

GCC и функции с переменным числом аргументов
Писал мини приложение в студии для работы с векторами, один из методов просто...

Шаблон с переменным числом аргументов, и возвращаемое значение функции
Здравствуйте! Использую С++11. Хочу возвращать элементы кортежа пытаюсь так,...

Шаблоны с переменным числом аргументов
Написал шаблон функции с переменным числом аргументов которая считает сумму...

Шаблонная функция с переменным числом аргументов
Сабж. Каким образом можно запретить использование шаблонной функции, если тип...

13
nmcf
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
28.11.2017, 19:43 2
http://www.cplusplus.com/reference/cstdarg/
0
Просто Саша
24 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 346
Завершенные тесты: 2
28.11.2017, 21:43  [ТС] 3
Там очень мало и невнятно.
Пока что понял, что не совсем с переменным числом параметров такая функция может быть.
По крайней мере один аргумент должен присутствовать или же это не так?
Грубо говоря, возможно ли через вот эти VA прибабахи, правильно обработать вот такую функцию:

C++
1
int func(...)
Добавлено через 5 минут
И еще, я так понял, что такие функции проектируются, исходя из однотипности списка передаваемых им аргументов.
То есть, даже эти VA прибабахи не способны правильно обработать вызов такой функции, если одним из аргументов будет char, а другим double.
Правильно ли я понимаю или же нет.
И вообще как современный C++ рассматривает такие функции, как пережиток, ну типа как ключевое слово register, от которого вот-вот откажутся, или же как вполне ходовую штуку.
0
nmcf
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
28.11.2017, 21:50 4
Цитата Сообщение от Просто Саша Посмотреть сообщение
возможно ли через вот эти VA прибабахи, правильно обработать вот такую функцию
Насколько я знаю, нет.
Цитата Сообщение от Просто Саша Посмотреть сообщение
если одним из аргументов будет char, а другим double
Тип может быть любой. printf() же любые параметры берёт.
0
Kuzia domovenok
2431 / 2139 / 522
Регистрация: 25.03.2012
Сообщений: 7,702
Записей в блоге: 1
28.11.2017, 21:54 5
Просто Саша, а нафиг они нужны-то? В си++ есть и полиморфизм и перегрузка операторов и шаблоны и много всякой фигни! Я осмелюсь утверждать, что если тебе в программе понадобились VA прибабах, то ты явно не теми методами решаешь свою задачу, а она на самом деле имеет более простое решение.

Итак, внимание вопрос. Что у тебя за задача?
0
Просто Саша
24 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 346
Завершенные тесты: 2
28.11.2017, 22:00  [ТС] 6
Да задача то у меня состоит в том, чтобы описать методику работы с функциями с переменным числом аргументов.

Добавлено через 4 минуты
Грубо говоря в C++ такого нет, что передаешь в функцию переменное число аргументов, а эта функция теми или иными способами должны:
1) Узнать количиство переданных аргументов
2)Для каждого переданного аргумента по его порядковому номеру определить его тип.

Я правильно понимаю?
0
Kuzia domovenok
2431 / 2139 / 522
Регистрация: 25.03.2012
Сообщений: 7,702
Записей в блоге: 1
28.11.2017, 22:02 7
Да это так.
0
Просто Саша
24 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 346
Завершенные тесты: 2
28.11.2017, 22:20  [ТС] 8
Ну так вот я и хочу найти какой-нибудь учебник, где четко и ясно говорилось, что на самом деле не совсем с произвольным, а по крайней мере с одним обязательным аргументом, откуда (ну это уже будет дальше сказано), вот VA штуки и берут эти аргументы, но только чтобы все это было приведено в какую-то цельную систему, а так пока читаешь, то просто какие-то отдельные куски информации, а цельной картины никто не дает.
0
Kuzia domovenok
2431 / 2139 / 522
Регистрация: 25.03.2012
Сообщений: 7,702
Записей в блоге: 1
28.11.2017, 22:26 9
Потому что как я уже выше сказал, для обучения эти штуки не нужны.
1
Просто Саша
24 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 346
Завершенные тесты: 2
28.11.2017, 22:35  [ТС] 10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Потому что как я уже выше сказал, для обучения эти штуки не нужны.
Ну это слишком просто.
Мне нужно вот реферат типа краткого сообщения по этой теме, и в нем я не смогу просто вот так написать, что мол для обучения эти штуки не нужны.

Добавлено через 3 минуты
И кстати вот ещё тоже такой вопрос.
В C++ возможно определние функций вот с таким прототипом

C++
1
int func(...);
Определить их можно. Можно что-то вернуть из них, но в чем их польза, если мы не можем получить доступ к их аргументам?
0
Kuzia domovenok
2431 / 2139 / 522
Регистрация: 25.03.2012
Сообщений: 7,702
Записей в блоге: 1
28.11.2017, 22:39 11
Ну окей, для доклада нужны, но совсем без начальных аргументов f(...) типа, ты её не применишь. Так и скажи.

Добавлено через 2 минуты
. Можно что-то вернуть из них, но в чем их польза, если мы не можем получить доступ к их аргументам?
в си много способов выстрелить себе в ногу. Не обязательно во. Всём искать пользу!
0
Просто Саша
24 / 25 / 4
Регистрация: 27.11.2017
Сообщений: 346
Завершенные тесты: 2
28.11.2017, 22:48  [ТС] 12
Вот ты скажи лучше, вот такое начало реферата потянет?

В языке программирования C++ имеется возможность определять функции с переменным числом аргументов. Это означает, что и одна и та же функция может отрабатывать как три, так и четыре, и более аргументов. Переменное число аргументов – это звучит слишком громко и весьма самонадеянно. Чтобы такая функция была хоть как-то полезна, в ней должны быть предусмотрены обычные аргумента, по крайней мере один обычный аргумент. Вот именно такой класс функций, в которых имеется по крайней мере один обычный аргумент, указываемый явно в определении мы и будем называть функциями с переменным числом аргументов, а функции, в которых такого явно определённого аргумента нет, мы просто назовём побочным продуктом создания компиляторов.

И ещё одно важное замечание, касающееся таких функций. Когда Вы создаёте функцию с переменным числом параметров, это вовсе не означает, что Вы сможете передавать ей какие-угодно параметры. Переменное число вовсе не означает что попало, а только лишь то, что имеется некоторая, но вовсе не абсолютная свобода, относительно числа и типов передаваемых такой функции аргументов. Как известно, свобода не есть синоним вседозволенности и никакая свобода ещё не отменила дисциплину. Так вот, если говорить о функциях с переменным числом аргументов, то число это переменное только для функции, которая узнает о числе и типах аргументах только при своём вызове, а вот для программиста это число всегда должно быть известным, равно как и типы аргументов, передаваемых таким функциям, тоже должно быть известно.

Я дальше планирую развить эту тему и очень конкретно и вдумчиво описать, ну пусть на элементарном уровне студента.
0
Kuzia domovenok
2431 / 2139 / 522
Регистрация: 25.03.2012
Сообщений: 7,702
Записей в блоге: 1
28.11.2017, 23:05 13
норм, чё!
0
nmcf
6408 / 5670 / 2581
Регистрация: 14.04.2014
Сообщений: 23,997
28.11.2017, 23:40 14
Эти функции скорее к C относятся. А в C++ многоточие в шаблоне.
0
28.11.2017, 23:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2017, 23:40

Написать функцию с переменным числом аргументов
Помогите понять, что от меня хотят-то вообще. Мне нужно: объявить функции в...

Функция с переменным числом аргументов (через шаблоны)
Доброго времени суток! Встал вопрос с реализацией такой функции. ...

Инициализация std::tuple переменным числом аргументов
Добрый вечер. Мне нужно инициализировать объект std::tuple, который является...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru