Если функция была определена с помощью прототипа, в котором явно указаны типы параметров, например.
void somefunc(int arg1, float arg2);
, но реализовано как
void somefunc(int arg1, ...) { ... }
возможно ли использовать va_arg для получения числа с плавающей точкой? Обычно это не разрешается делать, потому что функции varargs имеют неявные продвижения типов, такие как float to double, поэтому попытка получить необращенный тип не поддерживается, даже если функция вызывается с необращенным типом do для более конкретного прототипа функции. *
Причиной этого является получение аргументов разных типов во время выполнения в составе интерпретатора obj-c, где одна функция будет повторно использоваться для всех методов разных типов.
Лучше всего, если это не зависит от архитектуры (так что если на симуляторе и на устройстве больше не работает один и тот же код), хотя, если нет способа сделать это, будут приняты исправления, специфичные для устройства.
EDIT:
забыл особо упомянуть: функция знает типы и количество аргументов (она ищет код, который будет интерпретирован с помощью поиска по карте с параметром SEL _cmd)