Переменное число параметров в функции

258
24 апреля 2018, 03:13

Данный код работает некорректно. Он должен выводить то количество параметров, что указано ему аргументом num, используя указатель на адрес аргумента first, но что-то идёт не так... Я знаю о том, что существует библиотека stdarg.h. Но интересует меня именно этот вариант.

#include <iostream>
using std::cout;
using std::endl;
void func(int num, int first, ...)
{
    int *ptr = &first;
    while (num--)
    {
        cout << *ptr++ << endl;
    }
}
int main() {
    func(3, 1, 2, 3);
    // Output: 1, 1, rand
    return 0;
}
Answer 1

Потому что так и только так - с использованием va_list!

#include <iostream>
#include <stdarg.h>
using namespace std;
void func(int num, ...)
{
    va_list ap;
    va_start(ap,num);
    while(num--)
    {
        cout << va_arg(ap,int) << endl;
    }
    va_end(ap);
}
int main()
{
    func(3, 1, 2, 3);
}

Все остальные методы - как минимум непереносимы!

Понимаете, вы примерно хотите так: я знаю, что такое аппендицит, знаю о хирургических методах лечения, но почему после прыганья с бубном у меня дело доходит до перитонита? Как правильно прыгать с бубном?

НИКАК

Например, ваш код срабатывает с 32-разрядном VC++ 2017, и не работает в VC++ 64-разрядном. Вы хотите для каждого отдельного компилятора, каждого его режима писать свой код?...

READ ALSO
Идентификатор не определен Win api C++ [требует правки]

Идентификатор не определен Win api C++ [требует правки]

Всё решил проблему, оказывается GWL_WNDPROC уже не используется вместо него теперь GWLP_WNDPROC

1002
Включение нескольких тестов в проект CMake

Включение нескольких тестов в проект CMake

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

307
Как в QTableView добавить ссылку на файл?

Как в QTableView добавить ссылку на файл?

Возможно в ячейку добавить несколько ссылок на файлы? Допустим я QFileDialog выбираю несколько файлов и по нажатию добавить строку в таблицу, в ячейке...

311
Объяснения арифметики (код С++)

Объяснения арифметики (код С++)

Имеется кодЧто делает "typedef", "static const u256t1" и фрагменты "o1 += (o2^t1)

275