Параметры функции выделяются последовательно?
Параметры функции выделяются последовательно, или это зависит от компилятора?
Например, как можно получить указатель на переменные Эллипсиса, без использования макроса va_arg?
#include <iostream>
void findAverage(int first, ...)
{
int* ptr = &first;
std::cout << *(ptr + 1); // шаг 4 байта
}
int main()
{
findAverage(0, 1, 2, 3);
}
По моим соображениям, если выделение параметров функции является последовательным, то код выше должен был вывести значение 1
Ответы (1 шт):
Автор решения: HolyBlackCat
→ Ссылка
Зависит от компилятора, без va_arg никак.
*(ptr + 1) вылезает за границы переменной и вызывает неопределенное поведение.
На вашем месте, я бы забыл про ... и использовал variadic шаблоны.