Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
1 / 1 / 1
Регистрация: 19.11.2015
Сообщений: 6
1

Перестали работать функции с переменным числом параметров в Code::Blocks

29.11.2015, 04:06. Просмотров 343. Ответов 7
Метки нет (Все метки)

Например такая функция:
C++
1
2
3
4
5
6
7
8
9
double summa(int numb, double x, ...){
    double*p=&x;
    double sum=0;
    while(numb-->0){
         sum+=*p;
         p++;
    }
    return sum;
}
и если в main() написать чтото вроде этого:

C++
1
double s=summa(3,5.0,2.0,6.0);
После чего вывести s на экран, то выведет 10, попробовав с разными значениями, понял что возвращает
двойное значение первого double аргумента
Аналогичный код с интами работает корректно
Не понимаю что не так, раньше все было нормально
Компилятор mingw
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2015, 04:06
Ответы с готовыми решениями:

Функции с переменным числом параметров
функции с переменным числом параметров в качестве параметра форматная строка,как задать это дело в...

Функции с переменным числом параметров
#include <iostream.h> #include <conio.h> int max(int k,...) { int *p=&k; int maxi; ...

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

Функции с переменным числом параметров
Прошу помочь знатоков С++ в решении задачи, т.к. только начал изучать данный язык. Решить...

7
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30161 / 19700 / 7700
Регистрация: 22.10.2011
Сообщений: 34,337
Записей в блоге: 6
30.11.2015, 02:30 2
А например вот такая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdarg>
#include <iostream>
 
double summa(int numb, ...)
{
    va_list lst;
    va_start(lst, numb);
 
    double sum=0;
    for (int nArg=0; nArg < numb; nArg++)
    {
        sum += va_arg(lst, double);
    }
    va_end(lst);
    return sum;
}
 
int main()
{
    double s=summa(3,5.0,2.0,6.0);
    std::cout << s << std::endl;
    return 0;
}
?
0
Модератор
Эксперт CЭксперт С++
5022 / 2204 / 330
Регистрация: 20.02.2013
Сообщений: 5,599
Записей в блоге: 24
30.11.2015, 06:42 3
Nazichok, флаг-то С++11 не забыл выставить?
0
1358 / 582 / 198
Регистрация: 02.08.2011
Сообщений: 2,880
30.11.2015, 10:37 4
Времена меняются
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <initializer_list>
#include <iostream>
 
using namespace std;
 
double sum(const initializer_list<int> numbers_i, const initializer_list<double> numbers_d)
{
    double total = 0.0;
    for (const auto &i:numbers_i) total+=i;
    for (const auto &i:numbers_d) total+=i;
    return total;
}
 
 
int main(){
    double s = sum({3},{5.0,2.1,6.0});
    cout << s <<'\n';
}
0
Evg
Эксперт CАвтор FAQ
21121 / 8137 / 628
Регистрация: 30.03.2009
Сообщений: 22,455
Записей в блоге: 30
30.11.2015, 14:48 5
На всякий случай наглядная демонстрация того, почему код из поста #1 является чистейшим гавнокодом
Как перенести параметры из ф-ции printf() в самодельную

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

Добавлено через 53 секунды
Ну и следующие посты по ссылке почитай для самообразования

Добавлено через 1 минуту
А ещё надо знать это: Распространенные ошибки
1
1 / 1 / 1
Регистрация: 19.11.2015
Сообщений: 6
30.11.2015, 17:29  [ТС] 6
Цитата Сообщение от volvo Посмотреть сообщение
А например вот такая:
Да, с макросами работает
Цитата Сообщение от gru74ik Посмотреть сообщение
Nazichok, флаг-то С++11 не забыл выставить?
Он был выставлен
Цитата Сообщение от Evg Посмотреть сообщение
На всякий случай наглядная демонстрация того, почему код из поста #1 является чистейшим гавнокодом
Это я понимаю, разные архитектуры и тд. Вопрос в том, что раньше такой код работал, а теперь перестал, хотя ничего, что могло привести к такому результату, я вроде не менял
0
Evg
Эксперт CАвтор FAQ
21121 / 8137 / 628
Регистрация: 30.03.2009
Сообщений: 22,455
Записей в блоге: 30
30.11.2015, 20:28 7
Мог поменять режим с 32 на 64
0
1 / 1 / 1
Регистрация: 19.11.2015
Сообщений: 6
30.11.2015, 23:43  [ТС] 8
Как я понял с компилятором ничего критического не случилось.
Спасибо всем за ответы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2015, 23:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Функции с переменным числом параметров
Написать функцию prost с переменным числом параметров, которая находит все простые числа из...

Функции с переменным числом параметров
Написать функцию sum с переменным числом параметров, которая находит сумму чисел типа int по...

Функции с переменным числом параметров
Добрый день, уважаемые знатоки С++! Подскажите пожалуйста, что не правильно в моем коде? ...

Функции с переменным числом параметров
Написать функцию max с переменным числом параметров, которая находит минимальное из чисел типа int...


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

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

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