Приведите пожалуйста несколько простых примеров функций с возвратом значения, и примеры использования оператора return.
Только примеры нужны тривиальные, чтобы была ясна суть, что происходит. Желательно без изящных сокращений, это придет само позже...
С очень подробными комментариями, без них пока туговато...
Вот тебе функция, возвращающая число, на 1 большее полученнгого параметра. Т.е. если ты вызовешь её, например, так: add1(100), то в результате получишь 101. Чего непонятного?
Можно поточнее суть вопроса? Ибо сам принцип возврата результата работы функции в общем-то един для большинства ЯВУ.
На процессоре х86 он происходит в простейшем случае через аккумулятор (т.е. с помощью return). Приличные языки программирования также предполагают использование переданных переменных для возврата значений. В функции оператор return может быть в любом месте и он завершает работу функции в любом ее месте с возвратом значения, если это предусмотрено объявлением функции либо без него. Эпилог функции исполняется при этом в любом случае.
например
int fun1(){
int a=8;a*=6;return a;}
тут после завершения работы функции в аккумуляторе окажется 48.
или
void fun1(){
int a=8;a*=6;return;}
тут после завершения работы функции в аккумуляторе м.б. что угодно. Ибо туда функция ничего вам не кладет.
еще пример
int fun1(){
int a=8;a*=fun2();//где fun2() выдает произвольное целое число.
if ( a==48 ) return a;
if ( a!=48 ) return 0;
}
тут после завершения работы функции в аккумуляторе окажется 48. А может и 0. Но в любом случае будет исполнен одинаковый эпилог, который приведет к возврату на следующую после вызова функции fun1() инструкцию.
Как возврат производится в CVAVR мне неизвестно, но принцип подозреваю тот же, просто выбирается какой-то из регистров для возврата. Или речь даже не о CVAVR?
Спасибо!
Речь о CVAVR. Не знаю почему, но всё, что пока видел (даже применение ссылочных переменных при работе с несколькими массивами) схватывал или налету, или довольно быстро, (учитывая, что спецобразования нет, и занимаюсь изучением СИ и МК вообще -всего 2 недели с полного нуля,) а вот с этой функцией возврата, мозги клинят по-черному . Понятно что ничего сложного нет.
В догонку еще вопросик:
вот кусочек кода из статьи AHEIRа про прием RC5:
приведу пример попроще из школьного курса математики (когда-то тоже не понимал функции в математике)
y = f(x), где f(x)=x+1
знакомо?
на сях
int f(int x){
return x+1;
}
теперь вызываем функцию
int y;
y = f(1); // результат будет 2
printf ("%d",y);
функция возвращает тебе результат типа int и тип переменной должен быть того же типа, иначе ошибка
по поводу бит - такой тип использует только тот компилятор
другие его не поймут и так делать не надо
если у тебя один флаг, то лучше используй char flag = 0;
если флагов до 8, то используй тоже один байт, но теперь уже со сдвигом
т.е. если у тебя памяти много, то лучше юзать по байту на флаг
если памяти мало, но время некритично, то юзай 1 байт для хранения 8 флагов
в этом случае тебе надо будет использовать операции сдвига и логические операции and or xor для доступа к нужным битам и изменении их состояния