LINUX.ORG.RU

Возврат нескольких значений из функции

 


0

1

В некторых функциях иногда возникает необходимость вернуть несколько значений. Какие для этого есть красивые способы? Я знаю следующие,

1. Самое простое, через глобальные переменные, некрасиво. 2. Запись по преданному адресу, толсто и медлительно. 3. Возврат длинного слова (в регистрах) составленного из нескольких значений. Есть варианты через битовые сдвиги или union. Красивый макрос написать не получается, то то (typeof не работает, expected specifier-qualifier-list before ‘typeof’), то се (начинается использование стека при взятии адреса, хотя мне надо только тип сменить без последствий). Да и ещё в месте вызова надо это слово парсить на куски. Но все же это пока лучший из известных мне вариантов.

Язык C, компилятор avr-gcc.

	x = s2i(s);

	ri = (s16_t) (x & 0xFFFF);
	s = (const char *) (u16_t) (x >> 16);
★★

пиши на ассемблере, будет красиво и быстро :)

для AVR C слишком высокоуровневый

Harald ★★★★★
()

Возвращать по значению структуру или передавать указатель на неё как аргумент в функцию. На C++ можно было бы взять tuple.

Dendy ★★★★★
()

Во многия знания многия печали.

По ссылке можно передавать любой число значений (аргументов ф-ии). Ну или структуру возвращать.

AIv ★★★★★
()
Ответ на: комментарий от amaora

Еще через стек можно возвращать.

Deleted
()

int a, b;

void foo(int *arg1, int *arg2)
{
  *arg1 = 1;
  *arg2 = 2;
}

foo(&a, &b);

код писал навскидку, мог что-то упустить в синтаксисе. надеюсь суть смог донести.

Deleted
()

Передавай по указателю. И в случае с микроконтроллером нет ничего плохого в глобальных переменных.

Artificial_Thought ★★★★
()
Последнее исправление: Artificial_Thought (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.