Я экспериментирую со списками переменных переменных и вижу странные результаты ...
Кусок кода, который я тестирую:
#include <stdio.h>
#include <stdarg.h>
void foo(int param1, int param2, ...)
{
int param3 = 0;
va_list ap;
va_start(ap, param2);
param3 = va_arg(ap, int);
va_end(ap);
printf("param3: %d\n", param3);
}
int main(void)
{
foo(1,1);
foo(1,1,42);
}
И вывод для этого фрагмента:
param3: -1073748472
param3: 42
Для второго вызова: 'foo (1,1,42)', кажется, все работает как ожидалось.
Для первого вызова: 'foo (1,1)' результат выглядит как неинициализированный int, хотя я устанавливаю его равным 0, когда впервые инициализирую его в начале функции.
Я бы хотел полагаться на тот факт, что результирующая переменная должна иметь значение 0, если аргумент не вызывается. Я бы подумал, что va_arg () будет достаточно разумным, чтобы справиться с этим, но, похоже, это не так.
Есть предложения по этому поводу?
Большое спасибо.