All
Я пишу небольшое приложение на С ++, и эта проблема была озадачена. Есть ли способ создать (и позже перехватить) ошибку при доступе к элементу из макроса va_list, используя va_arg, если тип элемента не ожидается. Например: -
count=va_arg(argp,int);
if (count <= 0 || count > 30)
{
reportParamError(); return;
}
Теперь, если я передаю typedef вместо int, я получаю мусорное значение на компиляторе MS, но 95% отсчета времени получает значение 0 на gcc (на 64-битной sles10 sys). Есть ли способ, которым я могу принудительно провести некоторую проверку типов, чтобы получить ошибку, которая может быть перехвачена в блоке перехвата?
Любые идеи по этому поводу были бы очень полезны для меня. Или есть лучший способ сделать это. Прототип функции: -
void process(App_Context * pActx, ...)
Функция называется
process(pAtctx,3,type1,type2,type3);
Важно, чтобы pActx передавался как 1-й параметр и, следовательно, не мог передавать счет как 1-й параметр.
Update-1
Хорошо, это звучит странно, но nargs не является частью va_list на sles10 gcc. Я должен был положить в
#ifdef _WIN32
tempCount=va_arg(argp,int)
#endif
После этого параметры, следующие за nargs, не получают значения мусора. Тем не менее, это вводит компилятор / платформу на основе #ifdefs .... Спасибо Крис и Кристофер