Мат в 32 хода
237 / 172 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
1

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

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

на пример sum(2,56,515,-23.65,548)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.08.2010, 11:19
Ответы с готовыми решениями:

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

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

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

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

24
Эксперт С++
5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
10.08.2010, 12:05 2
nikkka, можно. Яркий пример - функции printf, scanf

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

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

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

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

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

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

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

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

Новичкам показывать эту статью строго запрещается. Понятно, что если человек всю жизнь будет работать только на intel'овской архитектуре, может быть так и можно делать, но ведь заранее никому неизвестно, как будут меняться программные соглашения по передаче параметров в будущих intel'овских процессорах. Да и незачем приучать людей к неправильным вещам
0
155 / 102 / 12
Регистрация: 22.07.2010
Сообщений: 443
11.08.2010, 21:28 18
Вот рабочий пример функции 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
В астрале
Эксперт С++
8048 / 4805 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.08.2010, 21:30 19
Evg, Суть в том, что использовать такую функцию

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

И да. Как уже писали здесь в С++0x для этого будет предназначены шаблоны с переменным числом параметров
0
Evg
Эксперт CАвтор FAQ
21265 / 8281 / 637
Регистрация: 30.03.2009
Сообщений: 22,638
Записей в блоге: 30
11.08.2010, 21:33 20
Цитата Сообщение от Lavroff Посмотреть сообщение
Evg, Суть в том, что использовать такую функцию
int foo(...) - нереально
Именно поэтому мне хочется высказать "Фи" в адрес разработчиков Си++. Либо всё-таки какая-то потаённая возможность есть. Либо закладывались на такие архитектурно-зависимые случаи.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.08.2010, 21:33
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru