Параметры функции выделяются последовательно?

Параметры функции выделяются последовательно, или это зависит от компилятора?

Например, как можно получить указатель на переменные Эллипсиса, без использования макроса 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 шаблоны.

→ Ссылка