Другие языки программирования и технологии

ключевое слово return в языке Си

Я знаю что return возвращает значение функции, но не совсем понимаю как это. объясните поподробнее и желательно как можно понятней для начинающего программиста. И что такое return 1 и return 0?
есть функция: ПОЧТОВЫЙ ЯЩИК ПОЧТОВОГО ОТДЕЛЕНИЯ
вы ей передаёте параметр; ПИСЬМО, в кротом содержится просьба об удвоении зарплаты
есть return: ПОЧТАЛЬОН
есть возвращаемое значение: УВЕДОМЛЕНИЕ, о решении вашей просьбы
есть переменная: ВАШ ПОЧТОВЫЙ ЯЩИК, в который почтальон положит уведомление

Как-то так...

int post(char* message) { if (strlen(message)) return 0; else return 0; }
...
int result = post("Дай миллиончик!");
Семён Воробьёв
Семён Воробьёв
75 003
Лучший ответ
Вот тебе вернули 1 тысячу и 0 тысяч. Почувствуешь разницу?
"Функция возвращает значение" означает, что конструкция
x=f(a);
присвоит x то, что было возвращено функцией. Т. е. если было return 0, то x станет равным 0.
Хулиган_05 .
Хулиган_05 .
86 112
при объявление функции, мы указываем тип возвращаемого значения
int func() bool func() и тп. что указали то мы обязаны и вернуть. Нельзя вернуть указатель на массив - причина простая, память освобождается после выхода переменной из зоны видимости. Исключение являются динамически созданные массивы. Когда пишут return 1 0 и тд. Используют чтобы вернуть информацию об удачи или не удачи выполнения функции. Т
Хулиган_05 . Указатель на массив вернуть можно. Нельзя возвращать указатель на локальную переменную (массив в т.ч.), вернее можно, но результат будет неопределенным.
Язык Си сделали для того, чтобы не мучиться с ассемблером. Однако, если вы изучаете Си стоит немного изучить ассемблер (хотя бы для x86).
Приведу пример с некоторыми упрощениями (в реальности всё гораздо страшнее) .

Как вам должно быть известно, компилятор "транслирует" исходный код в набор инструкций целевого процессора (объектный код, т. е. просто набор команд для процессора) .

Допустим, мы пишем:

// функция

int someFunction() {

int i = 0;

i++;

return i;

}

// её вызов

someVariable = someFunction();

Компилятор это превратит в что-то наподобие этого:

// функция

someFunction:

add sp, 4; поднимаем стек на 4 байта для локальной переменной i

mov [sp], 0; записываем значение

inc [sp] ; инкрементируем

;; У нас есть "договорённость": функции возвращают значение через

;; регистр ax

mov ax, [sp];

sub sp,4; возвращаем стек в исходное состояние

ret; перейти назад к месту вызова (восстанавливаем IP из стека)

// вызов

call someFunction; сохранить IP в стеке и перейти по метке (адресу)

mov someVariable, ax; записываем результат вызова в переменную

Тут есть неточности, но самое главное: функция возвращает значение через определённый регистр (eax, ax), либо каким-то другим способом.

http://pastebin.com/4j8PQh0r
Алан Хохлов
Алан Хохлов
1 156