Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
#1

Функция с переменным количеством параметров - C++

15.04.2014, 00:52. Просмотров 363. Ответов 8
Метки нет (Все метки)

Доброго времени суток! Я озадачился таким вопросом - как производится компиляция функций с переменным числом параметров? Компилятор создаёт экземпляры для каждого варианта количества параметров, или используются другие механизмы? Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2014, 00:52     Функция с переменным количеством параметров
Посмотрите здесь:

Функция с переменным количеством параметров - C++
Здравствуйте, возникла вот такая проблема: создаю функцию с переменным кол-ом параметров. Пример сделан мною по аналогии с...

Функция с переменным количеством параметров-оъектов - C++
Нашел на форуме пример функции с переменным количеством int, подскажите как переписать ее для передачи числа параметров-объектов...

Функция суммы с переменным количеством параметров - C++
На просторах форума нашёл код. Стало интересно посмотреть что выводят его отдельные части(отдельно переменная t, sum одного из аргументов и...

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

Шаблон с переменным количеством параметров - C++
У меня компилятор Visual Studio 2012, но не работает следующий код: #include <iostream> #include <string> void show_list() {} ...

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

Функции с переменным количеством параметров в языке C ++ - C++
Реализовать функцию конкатенации (сцепления) произвольного количества C-строк с динамическим изменением длины результирующей строки.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vikichocolated
4 / 4 / 0
Регистрация: 14.04.2014
Сообщений: 60
15.04.2014, 02:30     Функция с переменным количеством параметров #2
классный вопрос
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.04.2014, 04:28     Функция с переменным количеством параметров #3
Компилятор создаёт экземпляры для каждого варианта количества параметров, или используются другие механизмы?
в случае variadic templates - да.
а вот уже например с printf механизм другой: у printf гарантированно есть один параметр - строка формата, которая разбирается во время выполнения, из неё достается количество и тип каждого аргумента, отталкиваясь от этой информации, а так же от адреса 1-го аргумента, извлекаются остальные аргументы
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
16.04.2014, 12:03  [ТС]     Функция с переменным количеством параметров #4
Т.е. получается, создаётся массив параметров, а макрос определяет смещения в массиве?
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.04.2014, 00:32     Функция с переменным количеством параметров #5
Цитата Сообщение от iRomul Посмотреть сообщение
Т.е. получается, создаётся массив параметров, а макрос определяет смещения в массиве?
никакой массив не создается, параметры просто складываются в стек один за другим. какой макрос?
iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 480
Завершенные тесты: 1
18.04.2014, 00:56  [ТС]     Функция с переменным количеством параметров #6
Jupiter, va_start, va_begin, va_end и т.д.
Хорошо, так более-менее понятно, но непонятно вот что - что произойдёт, если функция будет искать больше аргументов, чем было передано? Например printf("%c%c", 'a');.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,052
Записей в блоге: 3
Завершенные тесты: 1
18.04.2014, 01:11     Функция с переменным количеством параметров #7
Цитата Сообщение от iRomul Посмотреть сообщение
что произойдёт, если функция будет искать больше аргументов, чем было передано?
будет прочитана память, где должен лежать параметр
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
18.04.2014, 01:18     Функция с переменным количеством параметров #8
Цитата Сообщение от iRomul Посмотреть сообщение
но непонятно вот что - что произойдёт, если функция будет искать больше аргументов, чем было передано? Например printf("%c%c", 'a');.
залезет в "чужой" стековый фрейм, и это кстати одна из хакерских атак
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2014, 01:20     Функция с переменным количеством параметров
Еще ссылки по теме:

Шаблон функции с переменным количеством параметров и среднее арифметическое - C++
Никак не могу придумать, как вычислить среднее арифметическое. Получилось найти сумму, а вот количество элементов постоянно меняется и...

Функции с переменным количеством параметров, stdarg.h. Исправить код - C++
Почему не работает? В итоге получается 0, а если в функции все что надо заменить с float на int, то работает правильно. В чем ошибка? ...

Функция с переменным количеством аргументов вызывает out of memory - C++
property(string & name_c, short nesting_c, string & level1, ...) { nesting=nesting_c; name=name_c; va_list p; ...

Функция с переменным числом параметров - C++
Доброе время суток! Решил навести красивость в функции что бы по мимо возврата хеш суммы она еще и печатала она (а то там базу надо...

Функция с переменным числом параметров - C++
В функцию с переменным числом параметров поступают символы, конец списка - ноль-символ '\ 0'. Найти и вывести символ чаще всего...


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

Или воспользуйтесь поиском по форуму:
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.04.2014, 01:20     Функция с переменным количеством параметров #9
Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
void output(int count, ...)
{
    int* elem = &count + 1;
    while (count--)
        cout << *elem++ << endl;
}
 
int main()
{
    output(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
    system("pause");
    return 0;
}
1. Создается указатель на первый элемент функции и сдвигается на размер типа данных первого аргумента.
2. Тип данных из простого указателя преобразовывается в необходимый (необходимо знать наверняка) и из него можно получить переданную информацию.
3. После того как информация была получена указатель сдвигается опять на размер типа данных для получения следующего аргумента.
Миниатюры
Функция с переменным количеством параметров  
Yandex
Объявления
18.04.2014, 01:20     Функция с переменным количеством параметров
Ответ Создать тему
Опции темы

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