Данный код работает некорректно. Он должен выводить то количество параметров, что указано ему аргументом 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;
}
Потому что так и только так - с использованием 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-разрядном. Вы хотите для каждого отдельного компилятора, каждого его режима писать свой код?...
Сборка персонального компьютера от Artline: умный выбор для современных пользователей