[uquote="ARV",url="/forum/viewtopic.php?p=3645056#p3645056"]вообще говоря, это совсем не то, что вы сказали: это возврат ОДНОГО значения. так ведь и я могу заявить, что командой
return (u8)data я возвращаю аж 8 значений bool
да и решение основано на свойствах оптимизатора. думаю, в любом компиляторе можно найти подходящий аналог, но я бы так делать не стал.[/uquote]
Это не свойство оптимизатора. Это так работает компилятор. Всегда. Даже когда оптимизация выключена. И причём думаю, что так должен работать любой компилятор на ARM. Потому что это основано на соглашениях вызова. А эти соглашения они общие для всех компиляторов.
Другими словами: если это было бы не так, то obj-файлы (и библиотеки) скомпилённые разными компиляторами были бы несовместимы. А они совместимы если соответствуют этому соглашению.
И "8 bool" - это совсем не то. Вы внимательнее прочитайте, что я написал. И почитайте про соглашения вызова. По соглашениям вызова для ARM, функция может использовать не более двух регистров R0:R1 для возврата значения. 8 разных значений в двух регистрах не вернуть. Если не говорить об упаковке. но упаковка - это уже не то.
Так что такой возврат - вполне себе штатный способ.
PS: Вобщем - читайте, что такое AEABI. Конкретно раздел "AEABI compliance" мануала на компилятор. Тогда узнаете, что такой способ возврата - стандарт для многих компиляторов.