Перейти к содержимому

Return 1 что означает

  • автор:

Return в C++

Return в C++

Все программы имеют жизненный цикл. Когда приложение завершает работу, оно должно сообщить об этом системе. Для передачи соответствующей информации используются специальные операторы – операторы возврата.

Далее предстоит разобраться с принципами работы функции return в C++. Эта информация пригодится преимущественно начинающим разработчикам.

Описание функции возврата

Все пользовательские функции после завершения выполнения инструкций способны возвращать значения туда, откуда они были вызваны. Пример – int main. Она в конце работы всегда возвращает значение в операционную систему. Связано это с тем, что ОС изначально вызывала main для работы программного обеспечения.

В C++ и C имеются операторы возврата. Они называются функциями перехода. Используются для возврата значений или остановки выполнения операции. Называется оператор перехода return (ретурном).

При обработке return происходит следующее:

  1. Выполнение имеющейся функции прекращается.
  2. Управление переходит обратно в точку вызова обработанной операции.
  3. Инструкции, написанные после return, никогда не выполняются.
  4. Если внутри функции отсутствует соответствующий оператор, при достижении закрывающейся фигурной скобки управление передается в точку вызова обработанной операции. Возвращаемое значение не определяется.

Операторы return имеются несколько сценариев использования. Всего их два. Далее они будут рассмотрены более подробно.

Использование внутри основной функции

Это – первый метод применения returning. Он делает следующее:

  1. Return останавливает исполнение программы. Происходит присваивание значения 0 (zero) или 1 (one). Они указываются на статус выполнения.
  2. Соответствующие коды использовались в C в виде соглашения. Связано это с отсутствием поддержки объектов, классов и исключений непосредственно в языке.
  3. Return 0 возвращает функции 0. Данная запись указывает на успешное выполнение заданных операций. Функция обработана так, как было задумано изначально.
  4. Return 1 возвращает 1. Указывает на наличие ошибки или сбоя при выполнении приложения. Данная запись свидетельствует о том, что функция не работает по задуманному предназначению.

Что делает returned 0, понятно. Стоит обратить внимание на то, что операционные системы могут самостоятельно завершать приложения с определенными кодами статуса выхода. Это возможно тогда, когда выполняется некоторый спектр недопустимых операций. А еще в зависимости от операционной системы на устройстве пользователя могут меняться соглашения о кодах возврата. Это достаточно редкая ситуация.

Внутри пользовательских функций

Второй вариант использования returns в программном коде – это внутри пользовательских функций. В C++ данный подход широко используется на практике. Соответствующий язык программирования рассматривает логическое значение в качестве отдельного типа данных с двумя «исходами» — истина (true) и ложь (false).

Значения 0 и 1 являются целочисленными (тип int). Они не могут быть неявно преобразованы в логические. Это приводит к тому, что:

  • return 0 делает возврат false из заданной инструкции;
  • return 1 возвращает истину.

Необходимо помнить, что не всегда returns применяются с 0 и 1. Далее предстоит рассмотреть наглядный пример с отличающимся возвращаемым параметром.

Принцип работы – пример

Чтобы лучше разбираться в операторах перехода в C++, рекомендуется рассмотреть принцип их работы на наглядном примере. Необходимо написать приложение, которое будет запрашивать у клиента число, а затем выводить его квадрат. Для уточнения «цифры» используется отдельная инструкция. Ее предстоит создать самостоятельно.

Делается это так:

  1. Сначала требуется создать функцию, которая запрашивает число на вывод с консоли:.
  2. Во второй строке создается функция типа int под названием EnterNumer.
  3. Строки 3-6 используются для описания инструкций, выполняемых после вызова функции. Сначала клиенту на экране предлагается ввод целого числа. Далее программа создает переменную для него и получит заданный параметр.
  4. Описанная функция вызывается из главной (main): .
  5. Функция, запрашивающая и получающая число, вызвана. По завершению работы она должна вернуть в main число, которое было указано пользователем. Эта операция прописана в 7 строке кода. После его обработки произойдет возврат переменной int. Поэтому инструкция выглядит как return input: .
  6. Чтобы сохранить значения, необходимо воспользоваться переменной. Она инициализируется функцией EnterNumber(). Это происходит в строке 11: .
  7. Соответствующая инструкция указывает на то, что в памяти резервируется место для переменной с именем num типа int. Далее происходит инициализация ее значением, возвращенным из функции EnterNumber. Предварительно запускается выполнение предусматриваемых инструкций.
  8. Необходимо завершить приложение выводом на дисплей квадрата числа, полученного из функции EnterNumber(). Для этого используется std::cout:.

При обработке соответствующего кода на экране появится такой результат:

Return в C++

Мы сделали программу, которая использует return. Он используется для возврата значений. Но соответствующий оператор может ничего не возвращать.

Тип void

Тип функции void в C++ — это ничего или пустота. Он указывает компилятору на то, что соответствующая команда не возвращает никаких параметров. Если в ее конце устанавливается оператор return, программа просто не пройдет стадию компиляции.

Данная операция вызывается так же, как и команды, возвращающие параметры. Она просто выполняет все необходимые инструкции, написанные в теле, после чего завершается. Вот наглядный пример:

Return в C++

Написанное приложение печатает две строчки текста, хранимых в двух «алгоритмах» типа void. Они ничего не вернут – только выполняют заданные инструкции. После этого происходит после обращения к ним main().

Как быстрее разобраться с темой

Операторы перехода в C++ – это не так трудно, как кажется. Чтобы надписи типа return, include, main и другие не вызывали вопросов, рекомендуется пройти дистанционные компьютерные курсы. На них с нуля пользователей научат разрабатывать приложения на разных языках – от Python до C++.

Пример – от образовательного центра OTUS. Пользователя в срок до 12 месяцев научат основам разработки. Люди смогут освоить любую IT-профессию. В процессе обучения гарантируется постоянное кураторство, много практики, а также интересные домашние задания. Ученику помогут составить портфолио. В конце курса выдается электронный сертификат, который подтверждает приобретенный спектр навыков и знаний.

Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus ! Ниже – один из них:

Оператор return (C)

Оператор return завершает выполнение функции и возвращает управление вызывающей функции. Выполнение возобновляется в вызывающей функции в точке сразу после вызова. Оператор return может возвращать значение, передавая его вызывающей функции. Дополнительные сведения см. в статье Тип возвращаемого значения.

Синтаксис

jump-statement :
return expression необ. ;

Значение expression , если оно имеется, возвращается вызывающей функции. Если expression параметр опущен, возвращаемое значение функции не определено. Параметр «выражение», если он присутствует, вычисляется и преобразуется к типу, возвращаемому функцией. Если оператор return содержит выражение в функциях, имеющих тип возвращаемого значения void , то компилятор выдает предупреждение, а выражение не вычисляется.

Если в определении функции оператор return не указан, то после выполнения последнего оператора вызванной функции управление автоматически возвращается вызывающей функции. В этом случае возвращаемое значение вызванной функции не определено. Если функция имеет тип возвращаемого значения, отличный от void , это считается серьезной ошибкой и компилятор выводит предупреждающее диагностическое сообщение. Если функция имеет тип возвращаемого значения void , то такое поведение приемлемо, но может считаться плохим стилем. Чтобы ваше намерение было понятным, используйте простой оператор return .

В качестве лучшей методики разработки рекомендуется всегда указывать тип возвращаемого значения для ваших функций. Если возвращаемое значение не требуется, объявите функцию как имеющую тип возвращаемого значения void . Если тип возвращаемого значения не указан, компилятор C предполагает, что по умолчанию используется тип возвращаемого значения int .

Многие программисты используют круглые скобки для заключения expression аргумента return оператора . Однако использовать эти скобки в языке C необязательно.

Если компилятор обнаруживает операторы, размещенные после return , он может вывести предупреждающее диагностическое сообщение о недоступном для выполнения коде.

В функции main оператор return и выражение являются необязательными. То, что происходит с указанным возвращаемым значением, зависит от реализации. Только для Майкрософт:реализация C от Майкрософт возвращает значение выражения процессу, вызвавшему программу, например cmd.exe . Если выражение return не указано, среда выполнения C от Майкрософт возвращает значение, соответствующее успешному (0) или неудачному (ненулевое значение) выполнению.

Пример

В этом примере показана одна программа из нескольких частей. Она демонстрирует оператор return и использование его для завершения выполнения функции и, при необходимости, возврата какого-то значения.

// C_return_statement.c // Compile using: cl /W4 C_return_statement.c #include // for INT_MAX #include // for printf long long square( int value ) < // Cast one operand to long long to force the // expression to be evaluated as type long long. // Note that parentheses around the return expression // are allowed, but not required here. return ( value * (long long) value ); >

Функция square возвращает квадрат своего аргумента, используя более широкий тип для избежания арифметической ошибки. Только для систем Майкрософт: в реализации C от Майкрософт тип long long достаточно велик, чтобы вмещать произведение двух значений int без переполнения.

Скобки вокруг выражения return в функции square вычисляются как часть выражения, и использовать их в операторе return не требуется.

double ratio( int numerator, int denominator ) < // Cast one operand to double to force floating-point // division. Otherwise, integer division is used, // then the result is converted to the return type. return numerator / (double) denominator; >

Функция ratio возвращает частное двух int аргументов в виде значения double с плавающей запятой. Выражение return принудительно использует операцию с плавающей запятой путем приведения одного из операндов к типу double . В противном случае будет использоваться оператор целочисленного деления, а дробная часть будет потеряна.

void report_square( void ) < int value = INT_MAX; long long squared = 0LL; squared = square( value ); printf( "value = %d, squared = %lld\n", value, squared ); return; // Use an empty expression to return void. >

Функция report_square вызывает square со значением параметра INT_MAX — самым большим целым числом со знаком, которое помещается в int . Результат типа long long сохраняется в squared , а затем выдается в выводе. Функция report_square имеет тип возвращаемого значения void , поэтому она не содержит выражения в операторе return .

void report_ratio( int top, int bottom ) < double fraction = ratio( top, bottom ); printf( "%d / %d = %.16f\n", top, bottom, fraction ); // It's okay to have no return statement for functions // that have void return types. >

Функция report_ratio вызывает ratio со значениями параметров 1 и INT_MAX . Результат типа double сохраняется в fraction , а затем выдается в выводе. Функция report_ratio имеет тип возвращаемого значения void , поэтому явно возвращать значение не требуется. Выполнение report_ratio не дает результата и не возвращает вызывающей функции никакого значения.

int main()

Функция main вызывает две функции: report_square и report_ratio . Поскольку report_square не принимает параметров и возвращает void , результат не присваивается переменной. Аналогичным образом функция report_ratio возвращает void , поэтому ее возвращаемое значение тоже не сохраняется. После вызова каждой из этих функций выполнение продолжается в следующем операторе. Затем main возвращает значение 0 (обычно свидетельствующее об успешном выполнении), чтобы завершить программу.

Чтобы скомпилировать пример, создайте файл исходного кода с именем C_return_statement.c . Затем скопируйте весь пример кода в показанном здесь порядке. Сохраните файл и скомпилируйте его в окне Командной строки разработчика с помощью следующей команды:

cl /W4 C_return_statement.c

После этого, чтобы запустить пример кода, введите C_return_statement.exe в командной строке. Выходные данных в этом примере выглядят следующим образом:

value = 2147483647, squared = 4611686014132420609 1 / 2147483647 = 0.0000000004656613 

Что делает return 1 в конце функции и почему он важен?

Есть код — обычное возведение в степень, но через рекурсию. Не совсем понимаю, зачем нужен return 1 в конце функции. Я так понимаю функции просто что-то надо вывести если условие не выполнено? Но почему она просто не закончится? И почему используется не банальный return 0?

def power(a, n): if n != 0: return a * power(a, n-1) return 1 print(power(float(input()), float(input()))) 

Отслеживать
26.2k 7 7 золотых знаков 31 31 серебряный знак 48 48 бронзовых знаков
задан 3 авг 2019 в 18:57
Antivist Home Antivist Home
85 1 1 золотой знак 4 4 серебряных знака 11 11 бронзовых знаков
Думаете, power(1, 0) должен выводить именно 0?
3 авг 2019 в 19:14

Разберитесь, пожалуйста, в логике кода, а потом уже задавайте вопрос про функции. Если Вы считаете, что a**0 == 0 , то с вопросами кода можно пока что обождать.

3 авг 2019 в 19:59

Тут проблема не в а**0 а в том чтоб закончить рекурсию когда доберемся до хвоста. Без ретурн 1 ответ будет также правильный, если убрать и иф. Но рекурсия не остановится.

Зачем return в программе?

What up, программач.
Т.е, указано, что return — это самый подходящий способ остановить программу.
Вот если указано return 0; — то программа закончиться.Я правильно понимаю?
А если ничего не указать?Она будет в памяти висеть или что?
А если указать 1?
Т.е. если указываешь 0, то это типа false.Можно значит false писать, кому что удобно?
Все никак не могу с этим ретурном разобраться.

  • Вопрос задан более трёх лет назад
  • 33877 просмотров

Комментировать
Решения вопроса 1

Вот если указано return 0; — то программа закончиться.Я правильно понимаю?

Только если это return в main().

return это команда закончить текущую функцию (и вернуть значение вызыающей функции)

А если ничего не указать?Она будет в памяти висеть или что?

С 1998 года она выполнит return 0 (опять же, справедливо только для main() ) как только достигнет конца функции main().

Т.е. если указываешь 0, то это типа false.

Это EXIT_SUCCESS.

А если указать 1?

Implementation defined. Обычно работает так же как и EXIT_FAILURE.

Фактически это код выхода. Он возвращается в ОС. Если программа была запущена из командной строки этот код выхода можно проверить чтобы узнать как была завершена программа.

Ответ написан более трёх лет назад
Нравится 7 1 комментарий

RiseOfDeath

Antony @RiseOfDeath

Уточнение — код выхода возвращаетс программе, запустившей прогрумму. (хотя как правило он ею не используется)

Ответы на вопрос 1

main() — это входящая функция. И все же это именно функция, со всеми вытекающими свойствами.
Ее можно обьявить как void, а значит она не должна что либо возвращать и return писать не надо.
Все же многие не понимают по началу, что return, это не только остановка программы, но еще и вывод результата работы функций.
Пример:

//создаем свою собственную функцию, которая что-то делает и что-то возвращает. int myrandom() < int a; a = rand()%100; //генерация случайного числа return a; // возвращаем результат генерации >//а вот наша программка, в которой мы вызовем эту функцию. void main() < int s = myrandom(); // функция myrandom возвращает результат в переменную s. cout

Ответ написан более трёх лет назад
Нравится 1 3 комментария
Saboteur @saboteur_kiev Куратор тега C++

Если объявить как void, это означает что можно возвращать любой тип данных, включая ничего. Но main должен возвращать код завершения программы, чтобы соответствовать.

Сергей: судя по вопросу, у человека не правильное мнение об return. Тут нужно пояснить сам факт, что return именно возвращает результат работы функции.
А выше люди прицепились к этому main, загоняют ему про "EXIT_SUCCESS", про "Implementation defined", а ему тупо надо пояснить, что функция должна обязана что либо возвращать. А возвращается это именно с помощью return.

Для меня когда-то было большим откровением, что, в некоторой степени, для операционной системы приложение является просто подпрограммой.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *