Я пытаюсь написать свои собственные функции va_args в первый раз, и у меня возникла проблема, заключающаяся в том, что большие целые числа (все еще в пределах диапазона int) усекаются до трех цифр и из заказ!va_arg возвращает только части моего целого
Вот реализация
void __sprintf(char * _string, ...)
{
int i = a_sizeof(_string); char _arg; int j =0; int format = 0;
va_list args;
va_start (args,_string);
for(; j < i; j++)
{
if(_string[j] == '\0')
break;
else if(_string[j] == '%')
{
format=1;
continue;
}
else if(format==1)
{
switch(_string[j])
{
case 'd':
_arg = va_arg(args,int);
printi(_arg); //Prints integers over serial by converting to ASCII
break;
default:
continue;
}
format = 0;
}
else
SerialPutChar(_string[j]);
}
va_end(args);
}
Что я получаю, когда я пытаюсь __sprintf("%d %d %d\n",32141,6400,919911);
это 141 32
то выходит. Я установил точки останова, и иногда это похоже на то, что я получил полное дерьмо.
Подозрения: реализация IAR по stdarg полной кости головы промаха использования в va_arg недостающие тонкой печати детали (которые, вероятно, выделены жирным шрифтом 14pt, но никто не читает это в любом случае)
Заранее спасибо!
Попробуйте удалить пробел между 'va_start' и его списком аргументов. – Palec