Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.65/113: Рейтинг темы: голосов - 113, средняя оценка - 4.65
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096

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

10.08.2010, 11:19. Показов 21306. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
на пример sum(2,56,515,-23.65,548)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2010, 11:19
Ответы с готовыми решениями:

Функции с переменным числом аргументов
Ребята, подскажите пожалуйста, где можно обстоятельно и подробно прочитать про использовании в C++ функций с несколькими аргументами. ...

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

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

24
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
10.08.2010, 12:05
nikkka, можно. Яркий пример - функции printf, scanf

Добавлено через 1 минуту
Вот так оно реализуется в С++

Добавлено через 35 минут
А с приходом стандарта С++0x нас ожидают еще и шаблоны с переменным числом аргументов
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
10.08.2010, 12:18  [ТС]
Цитата Сообщение от Nameless One Посмотреть сообщение
шаблоны с переменным числом аргументов
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
10.08.2010, 14:19
nikkka, если данные однотипные, то можно передавать указатель на массив
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.08.2010, 14:53
Только это правильно называется с "переменным числом аргументов". Есть ещё и научное название - "эллипс" (ellipsis). Слэнговое название "три точки" (threedot)

Пример есть тут. Но он несколько корявый, в том плане, что все аргументы одного и того же типа
http://www.cplusplus.com/refer... rg/va_arg/

Модешь по форуму поискать с ключевым словом "va_arg"
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
10.08.2010, 22:02
Цитата Сообщение от Evg Посмотреть сообщение
Есть ещё и научное название - "эллипс" (ellipsis).
Научное название "эллипсис", как и указано в скобках.
1
Мат в 32 хода
 Аватар для nikkka
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
10.08.2010, 22:13  [ТС]
то есть ""элипсис""?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
10.08.2010, 23:09
Цитата Сообщение от nikkka Посмотреть сообщение
то есть ""элипсис""?
Существуют функции, в описании которых невозможно указать число и типы всех допустимых параметров. Тогда список формальных параметров завершается эллипсисом (...), что означает: "и, возможно, еще несколько аргументов".
Страуструп
0
 Аватар для Mencey
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
11.08.2010, 18:11
В книге(справочнике) "Язык программирования C"(авторы Харбисон и Стил) было про это написано если найду напишу...

Добавлено через 1 час 14 минут
Нашёл в разделе "Стандертные дополнения языка"!!!
Но переписывать 3 страници неохото
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.08.2010, 18:19
Цитато из Шилдта:

В программе можно объявить функцию с переменным колличеством параметров. В большинстве случаев это относится к функции printf(). Чтобы сообщить компилятору, что функция может быть вызвана с разным колличеством параметров, объявление ее параметров следует завершить многоточием. Например, прототип, приведенный ниже означает, что функция func() может иметь по меньшей мере 2 параметра и сколько угодно доп параметров, или не иметь их.

C++
1
int func(int a, int b, ...);
Этот способ объявления параметров используется и в определении функции.
Любая функция с переменным колличеством параметров должна иметь по меньшей мере один фактический параметр. Следующее объявление неверно.

C++
1
int func(...) //Неверно
2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.08.2010, 19:43
Цитата Сообщение от Lavroff Посмотреть сообщение
Следующее объявление неверно
А в Си++ такое разрешено вроде бы как. g++ по крайней мере это ест
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.08.2010, 19:45
Evg, Ну да. Это возможно) Просто это раздел Шилдта еще про Си)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.08.2010, 20:20
Цитата Сообщение от Lavroff Посмотреть сообщение
Evg, Ну да. Это возможно) Просто это раздел Шилдта еще про Си)
Ну и вопрос на засыпку, а как этим в Си++ пользоваться? Имею в виду, когда ни одного именованного аргумента. У меня соображений нет
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.08.2010, 20:22
Evg, Да я как-то пытался... Но что-то никак. Наверное потому что, я в этом не разбираюсь, и мне это особо пока не нужно.
А это вообще может использоваться? Может просто компиль нормально на это реагирует?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.08.2010, 20:27
Цитата Сообщение от Lavroff Посмотреть сообщение
А это вообще может использоваться? Может просто компиль нормально на это реагирует?
Компилятор это ест (по крайней мере g++ и borland), так что скорее всего это из стандарта Си++. Как это может использоваться - не знаю. Хотелось бы узнать. Чтобы в очередной раз высказать "фи" в сторону Си++
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.08.2010, 20:37
Evg, Букв много. Но вроде то что надо
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.08.2010, 21:17
Цитата Сообщение от Lavroff Посмотреть сообщение
Могу ответственно заявить, что автор статьи - дятел. В том плане, что эллиптические аргументы должны доставаться совсем не так, как он написал, а через интерфейсы va_arg (из stdarg.h)

Новичкам показывать эту статью строго запрещается. Понятно, что если человек всю жизнь будет работать только на intel'овской архитектуре, может быть так и можно делать, но ведь заранее никому неизвестно, как будут меняться программные соглашения по передаче параметров в будущих intel'овских процессорах. Да и незачем приучать людей к неправильным вещам
0
 Аватар для Mencey
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 445
11.08.2010, 21:28
Вот рабочий пример функции sum(int,...):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
 
/* Будет складывать k аргументов после k */
int sum1(int k,...)
{
  va_list ap;
  int s = 0;
  va_start( ap, k );
  while( k-- > 0 )
    s += va_arg( ap, int );
  va_end(ap);
  return s;
}
 
/* Будет складывать аргументы пока невстретится 0(ноль) */
int sum2(int onearg,...)
{
  va_list ap;
  int s = onearg;
  int n;
  va_start( ap, onearg );
  while( n = va_arg( ap, int ) )
    s += n;
  va_end(ap);
  return s;
}
 
int main(int argc, char *argv[])
{
  int s1 = sum1( 10/*àðãóìåíòîâ*/, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 );
  int s2 = sum2( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0/*êîíåö*/ );
  printf( "s1 = %d; s2 = %d;\n", s1, s2 );
  system("PAUSE");
  return 0;
}
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.08.2010, 21:30
Evg, Суть в том, что использовать такую функцию

int foo(...) - нереально. Ибо нету конечного значения никакого. Следовательно не возможно сие сделать. Несмотря на то, что компилятор на это не ругается.

И да. Как уже писали здесь в С++0x для этого будет предназначены шаблоны с переменным числом параметров
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
11.08.2010, 21:33
Цитата Сообщение от Lavroff Посмотреть сообщение
Evg, Суть в том, что использовать такую функцию
int foo(...) - нереально
Именно поэтому мне хочется высказать "Фи" в адрес разработчиков Си++. Либо всё-таки какая-то потаённая возможность есть. Либо закладывались на такие архитектурно-зависимые случаи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2010, 21:33
Помогаю со студенческими работами здесь

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

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

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

Функция с переменным числом аргументов (через шаблоны)
Доброго времени суток! Встал вопрос с реализацией такой функции. template&lt;typename... Args&gt; returntype functionname(const...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru