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

C++ кто может по простому объяснить куда и что вовращает оператор RETURN?

int sum (int a, int b)
{
int c;
c = a + b;
return c;
}
Возвращает значение переменной c, т. е. сумму a и b
Slava Bbb
Slava Bbb
61 731
Лучший ответ
Виктор Сукиасян спасибо. а если стоит return(0); return(1); return 32 ?
Виктор Сукиасян спасибо. а если стоит return(0); return(1); return 32 ?
Виктор Сукиасян или нет его? совсем
Виктор Сукиасян какую роль играет тут ретурн? и без него так же?

int main()
{
int N;
setlocale(0, ""); // Включаем кириллицу
cout << "Введите число для вычисления факториала: ";
cin >> N;
cout << "Факториал для числа " << N << " = " << fact(N) << endl << endl; // fact(N) - функция для вычисления факториала.
system("pause");
return 0;
}
Исполняемый файл возвращает некий код - число, которое на уровне командного процессора м. б. проанализирован. Для этого существуют две возможности : либо конструкция if errorlevel, либо переменная %errorlevel%
Елдос Усенов
Елдос Усенов
80 880
Туда, где вызвана функция.
не вовращяет а возвраящет.
это значит что если ты вызовешь метод то он будет тебе по мимо того что ты его теле написал выполнять, он еще и выводить какое нибудь значение будет. у тя в проге там он возвраящет значение суммы в виде переменной С. значит в другой функции можно сделать так cout << sum(10,2); и будет выведено значение 12
если написать x = sum(1,2), то ретурн возвращает с, как результат выполнения функции, т. е. x будет равен 3
Олег Коннов
Олег Коннов
3 659
Виктор Сукиасян спасибо. а если стоит return(0); return(1); return 32 ?
Виктор Сукиасян или нет его? совсем
Виктор Сукиасян в таких случая что делает ретурн?
int main()
{
int N;
setlocale(0, ""); // Включаем кириллицу
cout << "Введите число для вычисления факториала: ";
cin >> N;
cout << "Факториал для числа " << N << " = " << fact(N) << endl << endl; // fact(N) - функция для вычисления факториала.
system("pause");
return 0;
}
на самом деле это выглядит так

004013E0 /$ 55 PUSH EBP //толкаем указатель на начало предыдущего фрейма
004013E1 |. 89E5 MOV EBP,ESP //сохраняем начало нового фрейма (сразу после адреса возврата), ибо ESP всегда будет указывать на верхушку стека
004013E3 |. 83EC 10 SUB ESP,0x10 // вообще-то для локальной переменной достаточно 4 байт
004013E6 |. 8B45 0C MOV EAX,DWORD PTR SS:[EBP+0xC]
004013E9 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+0x8]
004013EC |. 01D0 ADD EAX,EDX
004013EE |. 8945 FC MOV DWORD PTR SS:[EBP-0x4],EAX
004013F1 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-0x4] //результат в eax
004013F4 |. C9 LEAVE // сокращенно от MOV ESP,EBP; pop EBP
004013F5 \. C3 RETN //результат в eax

00401420 |. 8945 F4 MOV DWORD PTR SS:[EBP-0xC],EAX