10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
||||||
1 | ||||||
Оператор - Return. Что, куда и когда возвращает18.03.2020, 22:15. Показов 13075. Ответов 24
int main ( приветствую коллеги )
{ Подобная тема на форуме уже обсуждалаь, и я ее смотрел! Тему в книге - Оператор return, читал! Вот набросал такой примерчик, не как не могу понять: - куда возвращается стандартный ноль от - return 0; ведь функция ничего не вычисляет. В сиаутах "сидят" единицы - почему все работает, если - return 0; // закоментировать? - почему все также работает, если вместо ноля вернуть например - 444
0
|
18.03.2020, 22:15 | |
Ответы с готовыми решениями:
24
Куда возвращает return результат Куда return возвращает результат из функции? Что возвращает оператор return? Для чего нужен return, что и куда он возвращает? |
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
|
|
18.03.2020, 22:22 | 2 |
Сообщение было отмечено R_U_S_V как решение
Решение
Той программе, которая запускает вашу.
Если запустите из консоли, то вернет ноль программе-терминалу (в windows - это cmd.exe). Ноль - означает успешное завершение. Потому что это равносильно явному возврату нуля. Если вызывающая программа как-то анализирует код возврата из вашей, то это будет иметь значение. В противном случае это просто другое число и все.
1
|
Заблокирован
|
|
18.03.2020, 22:29 | 3 |
Это errorlevel - код возврата из приложения.
Прога возвращает число, которое может быть проанализировано, если это требуется. ------------- Читать книжки и смотреть примеры исходников, я гляжу, тебе влом. Зачем тебе программирование? Выбери военную или ментовскую карьеру, мож до генерал-майора дослужишься. Как у нас тут одна дослужилась недавно...
0
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
18.03.2020, 22:34 [ТС] | 4 |
А в случае если я накосячил с логикой, или еще с чем нибудь и будет аварийное завершение проги, то тогда что? Единицу вернет?
Или это означает: если все хорошо верни - 0 иначе верни - 1 или другое ? Добавлено через 2 минуты Накоц-то дождался что кто-то мне укажет уже на мое место, в этой жизни)))!!! Я сам размерусь, зачем мне и что мне делать ЛАДЫ?
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 |
Ошибаетесь!
Откуда вам известно когда и сколько я читаю книжек? Вы судите по пробелам в знаниях! Это никак не связано с количеством прочитанного... И прежде чем обратиться к форуму я подолгу сижу и разбираюсь сам. Впредь попросил бы Вас игнорировать просьбы в моих темах, мы явно с разных орбит и диалога не выйдет! Да и вдогонку, обращаться на "ТЫ" к человеку которого в глаза не видел, признак плохого тона, задумайтесь об этом...
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
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|||||||||||
18.03.2020, 23:07 [ТС] | 9 | ||||||||||
Спасибо, смотрю
Добавлено через 2 минуты Все пока Добавлено через 16 минут Это, что-то вроде того:
Добавлено через 5 минут Только я там переделал, потому как нормальное событие рекомендуют проверять в первой ветке, а исключения в остальных
Возможно я не сталкивался с ярким примером, который бы продемонстрировал мне его явную работу.
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,066
|
|
18.03.2020, 23:26 | 10 |
Он возвращается в окружение, из которого запускалась ваша программа.
Во-первых, возвращение именно 0 из функции main обладает особым смыслом: это символ успешного завершения вашей программы. В окружение при этом не обязательно вернется 0 . В окружение при этом вернется специфичный для данного окружения признак успешного завершения. Это может быть какое-то особое значение, это может быть какой-то флаг, т.е. это может быть что-то не имеющее ничего общего с нулем. Трансляция вашего 0 в этот специальный признак успешного завершения (если такая трансляция необходима) - задача реализации, т.е. какого-то кода, работающего снаружи main . Абсолютно то же самое относится к значению EXIT_SUCCESS , которое может быть отлично от 0 . Аналогично также обрабатывается значение EXIT_FAILURE , которое транслируется в принятый в окружении признак НЕуспешного завершения программы.Во-вторых, код завершения программы в окружении совсем не обязан быть совместимым с типом int . То есть возможно, что вообще все коды возврата из вашей программы будут подвергаться какой-то трансформации. Для значений 0 , EXIT_SUCCESS и EXIT_FAILURE суть этой трансформации в общих чертах оговорена в стандарте языка (см. во-первых). Для остальных значений она никак не оговорена и полностью зависит от реализации.Потому что функция main в С и С++ обладает особым статусом: если управление доходит до конца этой функции, то это автоматически эквивалентно return 0; . Только функция main обладает таким свойством.А почему все не должно "работать"? Что произойдет при возврате 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 |
Благодарю за такой развернутый ответ! И потраченное на меня время!
В целом понял вот, что: - значение возвращается не в функцию - main, то есть ей не присваивается этот ноль либо что-то еще, а в среду под управлением ОС в моем случае - виндус. То есть есть некая управляющая программа с которой я пока дела не имел((( По поводу терминологий... Вот, располагая литературой, оттуда и беру, потому как своего мнения нет, ввиду отсутствия опыта. То есть как в книжках ОБЗЫВАЮТ, так и .... 182 стр. Лафоре
0
|
Вездепух
11695 / 6374 / 1724
Регистрация: 18.10.2014
Сообщений: 16,066
|
|
19.03.2020, 08:50 | 12 |
Это известная проблема перевода. В терминологии С++ есть два термина - operator и statement - которые означают совершенно разные вещи. Оба термина зачастую переводят как "оператор". Это совершенно неприемлемо.
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
19.03.2020, 09:08 [ТС] | 13 |
А как быть с этим? Здесь в самой МЕИН эти возвраты вообще не понятно куда идут!
Добавлено через 11 минут Ладно, всем благодарен за отклик, чтоб Ваше время больше не тратить, дальше по ходу уже буду разбираться как и что. СПАСИБО БОЛЬШОЕ!
0
|
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
|
|
19.03.2020, 09:15 | 14 |
Возвраты идут тому кто вызывал функцию, вот кто ее вызовет тот и получит -1 или 1
1
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
|
|
19.03.2020, 11:02 | 15 |
Т.е. я зря выше давал статью, где есть примеры как этот код возврата проверить?
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
|
19.03.2020, 11:14 [ТС] | 16 |
0
|
18841 / 9840 / 2408
Регистрация: 30.01.2014
Сообщений: 17,282
|
|
19.03.2020, 11:23 | 17 |
В С++ вообще нигде нет такой семантики.
Возвращаются значения всегда во внешнюю среду по отношению к функции. Если речь о поведении внутри программы, то вызываемые функции возвращают значение вызывающим. Если речь о функции main, то она возвращает значение той программе, которая вызвала вашу.
1
|
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
|
||||||
19.03.2020, 11:45 [ТС] | 18 | |||||
Щас попробую наглядный пример создать и выложу...
Добавлено через 7 минут
Я вообще не понимаю... Добавлено через 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 | |
19.03.2020, 11:58 | |
Помогаю со студенческими работами здесь
20
Что означает запись в скобках и что возвращает return Что делает return? Ну возвращает ,и? Что делает return? Ну возвращает ,и? Что делать, если return возвращает 3 значения? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |