Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/64: Рейтинг темы: голосов - 64, средняя оценка - 4.69
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
1

Оператор - Return. Что, куда и когда возвращает

18.03.2020, 22:15. Показов 13075. Ответов 24

Author24 — интернет-сервис помощи студентам
int main ( приветствую коллеги )
{


Подобная тема на форуме уже обсуждалаь, и я ее смотрел!
Тему в книге - Оператор return, читал!

Вот набросал такой примерчик, не как не могу понять:

- куда возвращается стандартный ноль от - return 0; ведь функция ничего не вычисляет. В сиаутах "сидят" единицы
- почему все работает, если - return 0; // закоментировать?
- почему все также работает, если вместо ноля вернуть например - 444

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
system("chcp 1251>0");
 
  cout << main;
 
  cout << "\n привет \n";
 
  cout << main;
 
//system("pause>0");
//return 0;
 
Полная каша, в голове моей!
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.03.2020, 22:15
Ответы с готовыми решениями:

Куда возвращает return результат
Я только начал изучать язык программирования и к тому же C++ мой первый язык. Мой вопрос может...

Куда return возвращает результат из функции?
Добрый день . возник вопрос куда возвращает return из функции , то что он должен возвратить? Я...

Что возвращает оператор return?
довольно часто в книгах опускают оператор return, просто пишут,что он возвращает значение. а что...

Для чего нужен return, что и куда он возвращает?
Добрый день хацкеры. Как понять такую запись На примере string s = &quot;My Name&quot;;//переменная...

24
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
18.03.2020, 22:22 2
Лучший ответ Сообщение было отмечено R_U_S_V как решение

Решение

Цитата Сообщение от R_U_S_V Посмотреть сообщение
куда возвращается стандартный ноль от - return 0
Той программе, которая запускает вашу.
Если запустите из консоли, то вернет ноль программе-терминалу (в windows - это cmd.exe). Ноль - означает успешное завершение.

Цитата Сообщение от R_U_S_V Посмотреть сообщение
- почему все работает, если - return 0; // закоментировать?
Потому что это равносильно явному возврату нуля.

Цитата Сообщение от R_U_S_V Посмотреть сообщение
- почему все также работает, если вместо ноля вернуть например - 444
Если вызывающая программа как-то анализирует код возврата из вашей, то это будет иметь значение. В противном случае это просто другое число и все.
1
Заблокирован
18.03.2020, 22:29 3
Цитата Сообщение от R_U_S_V Посмотреть сообщение
куда возвращается стандартный ноль от - return 0; ведь функция ничего не вычисляет.
Это errorlevel - код возврата из приложения.
Цитата Сообщение от R_U_S_V Посмотреть сообщение
почему все также работает, если вместо ноля вернуть например - 444

Прога возвращает число, которое может быть проанализировано, если это требуется.
-------------
Читать книжки и смотреть примеры исходников, я гляжу, тебе влом. Зачем тебе программирование? Выбери военную или ментовскую карьеру, мож до генерал-майора дослужишься. Как у нас тут одна дослужилась недавно...
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
18.03.2020, 22:34  [ТС] 4
Цитата Сообщение от DrOffset Посмотреть сообщение
Если запустите из консоли, то вернет ноль программе-терминалу (в windows - это cmd.exe). Ноль - означает успешное завершение.
А в случае если я накосячил с логикой, или еще с чем нибудь и будет аварийное завершение проги, то тогда что? Единицу вернет?

Или это означает:

если все хорошо
верни - 0
иначе
верни - 1 или другое
?

Добавлено через 2 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
Читать книжки и смотреть примеры исходников, я гляжу, тебе влом. Зачем тебе программирование? Выбери военную или ментовскую карьеру, мож до генерал-майора дослужишься. Как у нас тут одна дослужилась недавно...
Накоц-то дождался что кто-то мне укажет уже на мое место, в этой жизни)))!!!
Я сам размерусь, зачем мне и что мне делать ЛАДЫ?
0
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
18.03.2020, 22:35 5
R_U_S_V, вы сами решаете что вам возвращать. Например ваша программа может попытаться открыть файл и вывести его содержимое. В этом случае вы можете возвратить ноль. Если файл открыть не удалось, то можете возвратить, например, 1.
Если вашу программу пользователь запускает из терминала, он сможет проанализировать этот код, и понять нормально ваша программа отработала или нет.
Короче говоря: эти коды - это еще один способ коммуникации вашей программы с внешней средой.
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
18.03.2020, 22:37  [ТС] 6
Цитата Сообщение от Verevkin Посмотреть сообщение
Читать книжки и смотреть примеры исходников, я гляжу, тебе влом.
Ошибаетесь!
Откуда вам известно когда и сколько я читаю книжек? Вы судите по пробелам в знаниях! Это никак не связано с количеством прочитанного...
И прежде чем обратиться к форуму я подолгу сижу и разбираюсь сам.
Впредь попросил бы Вас игнорировать просьбы в моих темах, мы явно с разных орбит и диалога не выйдет!

Да и вдогонку, обращаться на "ТЫ" к человеку которого в глаза не видел, признак плохого тона, задумайтесь об этом...
0
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
18.03.2020, 22:38 7
R_U_S_V, https://bencane.com/2014/09/02... h-scripts/
Правда тут примеры для bash (unix/linux), но суть не меняется и на других системах.
1
Заблокирован
18.03.2020, 22:40 8
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Ошибаетесь!

Цитата Сообщение от R_U_S_V Посмотреть сообщение
Откуда вам известно когда и сколько я читаю книжек?
Отсюда:
Цитата Сообщение от R_U_S_V Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
system("chcp 1251>0");
cout << main;
cout << "\n привет \n";
cout << main;
//system("pause>0");
//return 0;
Полная каша, в голове моей!
}
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
18.03.2020, 23:07  [ТС] 9
Цитата Сообщение от DrOffset Посмотреть сообщение
https://bencane.com/2014/09/02/under...-bash-scripts/
Правда тут примеры для bash (unix/linux), но суть не меняется и на других системах.
Спасибо, смотрю

Добавлено через 2 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
Отсюда:
Все пока

Добавлено через 16 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Например ваша программа может попытаться открыть файл и вывести его содержимое. В этом случае вы можете возвратить ноль. Если файл открыть не удалось, то можете возвратить, например, 1.
Это, что-то вроде того:
C++
1
2
3
4
5
6
7
8
9
10
11
12
 ifstream file ("d:\\1\\файл.txt");
 
 if (!file) 
 {
 cout << "Файл не открыт\n\n"; 
 return -1;
 }
 else
 {
 cout << "Все ОК! Файл открыт!\n\n";
 return 1;
 }
Взял отсюда - (https://purecodecpp.com/archives/2751)

Добавлено через 5 минут
Только я там переделал, потому как нормальное событие рекомендуют проверять в первой ветке, а исключения в остальных
C++
1
2
3
4
5
6
 if (textFile)
    cout << " Все ОК! Файл открыт!\n\n";  // пишем ответ в консоль
    return   1;
else
    cout << " Файл не открыт\n\n";  // пишем ответ в консоль
    return - 1;
Но работает все и без опереторов - return
Возможно я не сталкивался с ярким примером, который бы продемонстрировал мне его явную работу.
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,066
18.03.2020, 23:26 10
Цитата Сообщение от R_U_S_V Посмотреть сообщение
- куда возвращается стандартный ноль от - return 0; ведь функция ничего не вычисляет. В сиаутах "сидят" единицы
Он возвращается в окружение, из которого запускалась ваша программа.

Во-первых, возвращение именно 0 из функции main обладает особым смыслом: это символ успешного завершения вашей программы. В окружение при этом не обязательно вернется 0. В окружение при этом вернется специфичный для данного окружения признак успешного завершения. Это может быть какое-то особое значение, это может быть какой-то флаг, т.е. это может быть что-то не имеющее ничего общего с нулем. Трансляция вашего 0 в этот специальный признак успешного завершения (если такая трансляция необходима) - задача реализации, т.е. какого-то кода, работающего снаружи main. Абсолютно то же самое относится к значению EXIT_SUCCESS, которое может быть отлично от 0. Аналогично также обрабатывается значение EXIT_FAILURE, которое транслируется в принятый в окружении признак НЕуспешного завершения программы.

Во-вторых, код завершения программы в окружении совсем не обязан быть совместимым с типом int. То есть возможно, что вообще все коды возврата из вашей программы будут подвергаться какой-то трансформации. Для значений 0, EXIT_SUCCESS и EXIT_FAILURE суть этой трансформации в общих чертах оговорена в стандарте языка (см. во-первых). Для остальных значений она никак не оговорена и полностью зависит от реализации.

Цитата Сообщение от R_U_S_V Посмотреть сообщение
- почему все работает, если - return 0; // закоментировать?
Потому что функция main в С и С++ обладает особым статусом: если управление доходит до конца этой функции, то это автоматически эквивалентно return 0;. Только функция main обладает таким свойством.

Цитата Сообщение от R_U_S_V Посмотреть сообщение
- почему все также работает, если вместо ноля вернуть например - 444
А почему все не должно "работать"? Что произойдет при возврате 444 зависит только от того, что в ответ на это значение сделает используемая вами реализация и используемое вами окружение. А они, скорее всего, вообще ничего не делают.

В интерактивных окружениях обычно получение из программы ее кода завершения и интерпретация этого кода - это ваша же задача. Вы в окружении проигнорировали этот код - вот он ни на что и не повлиял.

Добавлено через 6 минут
P.S. И return - это не "оператор" ("operator"), это "инструкция" ("statement"). Кто-то как-то предлагал "более лучший" перевод, но у меня уже из головы вылетело...

P.P.S. Как я сказал выше, значение EXIT_SUCCESS не обязано совпадать со значением 0, то есть теоретически на вашей платформе могут быть два отличных целочисленных значения, которые, согласно требованиям стандарта, ведут себя эквивалентно при возвращении из main. Теоретически вполне возможно что на вашей платформе второе значение - это именно 444. Это также может быть объяснением, почему после смены return 0; на return 444; ничего не поменялось
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 08:39  [ТС] 11
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И return - это не "оператор"
Благодарю за такой развернутый ответ! И потраченное на меня время!
В целом понял вот, что:
- значение возвращается не в функцию - main, то есть ей не присваивается этот ноль либо что-то еще, а в среду под управлением ОС в моем случае - виндус. То есть есть некая управляющая программа с которой я пока дела не имел(((

По поводу терминологий...
Вот, располагая литературой, оттуда и беру, потому как своего мнения нет, ввиду отсутствия опыта. То есть как в книжках ОБЗЫВАЮТ, так и ....
Оператор - Return. Что, куда и когда возвращает
182 стр. Лафоре
0
Вездепух
Эксперт CЭксперт С++
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,066
19.03.2020, 08:50 12
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Вот, располагая литературой, оттуда и беру, потому как своего мнения нет, ввиду отсутствия опыта. То есть как в книжках ОБЗЫВАЮТ, так и ....
Это известная проблема перевода. В терминологии С++ есть два термина - operator и statement - которые означают совершенно разные вещи. Оба термина зачастую переводят как "оператор". Это совершенно неприемлемо.
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 09:08  [ТС] 13
Цитата Сообщение от R_U_S_V Посмотреть сообщение
ifstream file ("d:\\1\\файл.txt");
if (!file)
 {
 cout << "Файл не открыт\n\n";
 return -1;
 }
 else
 {
 cout << "Все ОК! Файл открыт!\n\n";
 return 1;
 }
А как быть с этим? Здесь в самой МЕИН эти возвраты вообще не понятно куда идут!

Добавлено через 11 минут
Ладно, всем благодарен за отклик, чтоб Ваше время больше не тратить, дальше по ходу уже буду разбираться как и что. СПАСИБО БОЛЬШОЕ!
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
19.03.2020, 09:15 14
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Здесь в самой МЕИН эти возвраты вообще не понятно куда идут!
Возвраты идут тому кто вызывал функцию, вот кто ее вызовет тот и получит -1 или 1
1
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
19.03.2020, 11:02 15
Цитата Сообщение от R_U_S_V Посмотреть сообщение
вообще не понятно куда идут!
Т.е. я зря выше давал статью, где есть примеры как этот код возврата проверить?
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 11:14  [ТС] 16
Цитата Сообщение от DrOffset Посмотреть сообщение
Т.е. я зря выше давал статью, где есть примеры как этот код возврата проверить?
Нт не зря! Все изучаю
0
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
19.03.2020, 11:23 17
Цитата Сообщение от R_U_S_V Посмотреть сообщение
есть ей не присваивается этот ноль либо что-то еще
В С++ вообще нигде нет такой семантики.
Возвращаются значения всегда во внешнюю среду по отношению к функции. Если речь о поведении внутри программы, то вызываемые функции возвращают значение вызывающим. Если речь о функции main, то она возвращает значение той программе, которая вызвала вашу.
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 11:45  [ТС] 18
Цитата Сообщение от DrOffset Посмотреть сообщение
Если речь о поведении внутри программы, то вызываемые функции возвращают значение вызывающим.
Щас попробую наглядный пример создать и выложу...

Добавлено через 7 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int main()
{
system("chcp 1251>0");
 
    ofstream fout("file.txt");         // создаём объект класса - ofstream для записи и связываем его с файлом - file.txt
    //fout.open("file.txt");
    fout << "Работа с файлами в С++";  // записываем строки в файл
    fout.close();                      // закрываем файл
 
    cout << "\n считать текстовый файл? (да/нет) ";
    char ch1[4] = "да";                // строка (массив) содержит разрешающий ответ
    char ch2[4] = {};                  // массив в который пишем свой ответ
    gets(ch2);                         // вводим ответ
 
 
if (strcmp(ch1, ch2)==0)               // сравниваем ответы
{
 
 
    ifstream fin("file.txt");          // открываем файл для чтения
    char buff[50];                     // (массив) буфер промежуточного хранения текста считываемого из файла
    fin >> buff;                       // считываем первое слово из файла
    cout << buff << endl;              // печатаем это слово в консоли
 
    fin.getline(buff, 50);             // считываем строку из файла
    fin.close();                       // закрываем файл
    cout << buff << endl;              // печатаем эту строку в консоли
 
 
}
else
{
    cout << "\n отказ от чтения файла ";
    return 1;
}
 
 
system("pause>0");
return 0;
}
34 строка! Там то сути ретурна не было, я его сам добавил! просто в некоторых кодах он есть и в if и в else. В то время как и без них все работает, я проверял.
Я вообще не понимаю...

Добавлено через 7 минут
Запутался полностью. а еще эти сокращения в книгах блин. вместо того чтоб для ученика написать так - if(0 != *s) они пишут так - if(*s), вот пойди пойми сразу, что он там имел ввиду! Я сейчас читаю книгу совершенный код Макконела, понятно что многое не понимаю, но одно ясно точно, писать нужно чтобы было понятно другим.
Не знаю...
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
19.03.2020, 11:50 19
Что будет если в студии нажать на F5, что напишет в лог?
The program '....' has exited with code 1 (0x1).
вот это 1 и есть то что возвратил main
больше в этом нет никакого смысла в пределах этого тестового проекта
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
19.03.2020, 11:58  [ТС] 20
Спасибо! Думаю пока достаточно мне Вашей совместной помощи, инфы итак уже много.
Есть моменты когда происходит возврат (полученного) значения в функцию при помощи - return, там более менее вроде пока понял.
0
19.03.2020, 11:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2020, 11:58
Помогаю со студенческими работами здесь

Что означает запись в скобках и что возвращает return
Всем привет! Начал читать книгу BecomeAnXcoder и тут появился вопрос. В пример приведен такой код...

Что делает return? Ну возвращает ,и?
Я не просто спрашиваю не прочитав инфорацию,я уже с сотню статей прочитал и возможно я тупой , но...

Что делает return? Ну возвращает ,и?
Разве с помощью global , то же самое сделать нельзя? Пример: def add(x, y): global z ...

Что делать, если return возвращает 3 значения?
Здравствуйте. Есть функция, которая возвращает 3 массива, что-то типа такого: def func1():...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru