У меня есть с-функцию, которая использует varadic аргументы стандартным способом, ниже упрощенный пример:stdargs [va_start(), va_arg() и т. Д.] Сломан на arm64?
void func(parameter,...) {
va_list args;
va_start(args, parameter);
//process args
v1 = va_arg(args,sometype);
v2 = va_arg(args,sometype);
...
vn = va_arg(args,sometype);
va_end(args);
}
//call func
func(parameter, p1, p2, ..., pn);
на всех устройствах armv7s и нижней, а также всех тренажеров в том числе 64-битной тренажере это преуспевает и переменной v1 для vn назначается p1 в pn, но когда это выполняется на arm64, кажется, что вариационный список обратный (v1 = pn, v2 = pn-1, ..., vn = p1)
Есть ли какое-либо исправление для это? Или я пропустил документацию, описывающую это изменение?
Благодаря
EDIT:
я не упомянул ключевой элемент к этому вопросу, что я не думаю, чтобы упомянуть прежде. Я пытался пересказывать невариантные функции с общей вариационной функцией.
Примечание: используемый компилятор был Apple, LLVM 5,0
Можете ли вы дать нам реальный пример выполнения? –
быстрый и грязный обходной путь: отключите arm64 в настройках вашего проекта: -p приложение будет медленнее на iphone5, но пользователи iphone5s не заметят, потому что iphone5s по-прежнему является самым быстрым телефоном. (приложение по-прежнему будет быстрее на iphone5, чем на iphone5.) плюс: двоичный файл будет меньше, если вы опустите архитектуру. проблема с компилятором наверняка будет исправлена когда-нибудь, и когда это произойдет, вы можете повторно использовать arm64. – Michael
Проголосовало за утверждение ошибки компилятора без публикации кода. Это просто смешно. – gnasher729