У меня есть фрагмент кода, который принимает максимум 8 переменных аргументов.
Но иногда я передаю менее 8 аргументов.
Я не передаю числопараметры в вызове моей функции, но число, которое декодирует в мой формат строки.
Страница man va_arg говорит: «Если нет следующего аргумента или если тип не совместим с типом фактического следующегоаргумент (как продвигается в соответствии с продвижением аргумента по умолчанию), произойдут случайные ошибки. "
Я не вижу никаких ошибок во время выполнения кода.
В GDB я вижу, что случайные значения мусораприсваивается моему arg [I].
Так что же это за «случайная ошибка», на которую ссылается man-страница?
uint64 arg[8];
va_list ap;
va_start(ap, num); // num is not number of args, it is function arg
for(int i = 0; i < 8; i++)
arg[i] = va_arg(ap, uint64);
va_end(ap);