Если функция была определена с помощью прототипа, в котором явно указаны типы параметров, например.Есть ли способ получить поплавок из параметров функции varargs?
void somefunc(int arg1, float arg2);
но реализуется как
void somefunc(int arg1, ...) { ... }
возможно использовать va_arg для получения поплавок? Обычно это предотвращается, потому что функции varargs имеют неявные поощрения типа, такие как float, чтобы удвоить, поэтому попытка получить непродвинутый тип не поддерживается, хотя функция вызывается с использованием непромотируемого типа для более конкретного прототипа функции.
Причина этого заключается в том, чтобы извлекать аргументы разных типов во время выполнения, как часть интерпретатора obj-c, где одна функция будет повторно использоваться для всех разных типов методов.
Это было бы лучше всего, поскольку архитектура была независимой (так что, если ничто иное не работает на симуляторе и на устройстве), хотя, если нет способа сделать это, будут приняты конкретные исправления для конкретного устройства.
EDIT: забыл упомянуть именно: функция знает типы и количество аргументов (он просматривает код, который будет интерпретироваться с картой поиска с SEL _cmd параметром)
Передайте указатель, если это важно. – kennytm
Есть ли ограничение не только для продвижения по умолчанию? (И выравнивание defn./decl.?) –
Я прочитал вопрос как «Как создать общий батут, который можно подключить во время выполнения, как любой случайный IMP с любым случайным набором аргументов?» Для этого varargs нельзя использовать. – bbum