Подробное описание использования va_arg()
.
Вы не можете использовать:
va_arg(argptr, char);
без вызова неопределенного поведения (что плохо !),Переменные аргументы функции varargs проходят повышение: float
передается как double
, а char
, unsigned char
, signed char
, short
, unsigned short
повышается до int
или unsigned (int)
как требуется.Следовательно, вы никогда не сможете получить char
напрямую с помощью va_arg
;Вы можете указать только продвигаемые типы.Вам нужно было бы написать:
char c = (char) va_arg(argptr, int);
float f = (float) va_arg(argptr, double);
На этот раз приведение происходит в результате выполнения задания;говорить, что это происходит с приведением, не является строго необходимым, но не причиняет вреда (хотя я, вероятно, не стал бы писать приведение в своем собственном коде).