Что такое return 0

Завершает выполнение функции и возвращает элемент управления в вызывающую функцию (или в операционную систему при передаче управления из функции main ). Terminates the execution of a function and returns control to the calling function (or to the operating system if you transfer control from the main function). Выполнение возобновляется в вызывающей функции в точке сразу после вызова. Execution resumes in the calling function at the point immediately following the call.

Синтаксис Syntax

Примечания Remarks

Предложение expression , при его наличии, преобразуется в тип, указанный в объявлении функции, как если бы выполнялась инициализация. The expression clause, if present, is converted to the type specified in the function declaration, as if an initialization were being performed. Преобразование из типа выражения возвращают тип функции может создавать временные объекты. Conversion from the type of the expression to the return type of the function can create temporary objects. Дополнительные сведения о том, как и когда создания временных объектов, см. в разделе временные объекты. For more information about how and when temporaries are created, see Temporary Objects.

Значение предложения expression возвращается в вызывающую функцию. The value of the expression clause is returned to the calling function. Если выражение пропущено, то возвращаемое значение функции не определено. If the expression is omitted, the return value of the function is undefined. Конструкторы и деструкторы и функции типа void, нельзя указать выражение в возвращают инструкции. Constructors and destructors, and functions of type void,cannot specify an expression in the return statement. Функции всех других типов необходимо указать выражение в возвращают инструкции. Functions of all other types must specify an expression in the return statement.

Когда поток элемента управления выходит из блока, включающего определение функции, результат одинаков как бы Если возвращают бы был выполнен оператор без выражения. When the flow of control exits the block enclosing the function definition, the result is the same as it would be if a return statement without an expression had been executed. Это недопустимо для функций, объявленных как возвращающие значение. This is invalid for functions that are declared as returning a value.

Функция может иметь любое количество возвращают инструкций. A function can have any number of return statements.

В следующем примере используется выражение с возвращают инструкции для получения наибольшего из двух целых чисел. The following example uses an expression with a return statement to obtain the largest of two integers.

Читайте также:  Как переводится payment to 7000 на русский

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

Возврат из функции

Функция может завершать выполнение и осуществлять возврат в вызывающую программу двумя способами. Первый способ используется тогда, когда после выполнения последнего оператора в функции встречается закрывающая фигурная скобка (>). (Конечно, это просто жаргон, ведь в настоящем объектном коде фигурной скобки нет!) Например, функция pr_reverse() в приведенной ниже программе просто выводит на экран в обратном порядке строку Мне нравится С , а затем возвращает управление вызывающей программе.

Как только строка выведена на экран, функции pr_reverse() "делать больше нечего", поэтому она возвращает управление туда, откуда она была вызвана.

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

В функции может быть несколько операторов return . Например, в следующей программе функция find_substr() возвращает начальную позицию подстроки в строке или же возвращает —1, если подстрока, наоборот, не найдена. В этой функции для упрощения кодирования используются два оператора return .

Возврат значений

Все функции, кроме тех, которые относятся к типу void , возвращают значение. Это значение указывается выражением в операторе return . Стандарт С89 допускает выполнение оператора return без указания выражения внутри функции, тип которой отличен от void . В этом случае все равно происходит возврат какого-нибудь произвольного значения. Но такое положение дел, мягко говоря, никуда не годится! Поэтому в Стандарте С99 (да и в C++) предусмотрено, что в функции, тип которой отличен от void , в операторе return необходимо обязательно указать возвращаемое значение. То есть, согласно С99, если для какой-либо функции указано, что она возвращает значение, то внутри этой функции у любого оператора return должно быть свое выражение. Однако если функция, тип которой отличен от void , выполняется до самого конца (то есть до закрывающей ее фигурной скобки), то возвращается произвольное (непредсказуемое с точки зрения разработчика программы!) значение. Хотя здесь нет синтаксической ошибки, это является серьезным упущением и таких ситуаций необходимо избегать.

Если функция не объявлена как имеющая тип void , она может использоваться как операнд в выражении. Поэтому каждое из следующих выражений является правильным:

Читайте также:  Формат градусов минут секунд в excel

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

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

В программе можно использовать функции трех видов. Первый вид — простые вычисления. Эти функции предназначены для выполнения операций над своими аргументами и возвращают полученное в результате этих операций значение. Вычислительная функция является функцией "в чистом виде". В качестве примеров можно назвать стандартные библиотечные функции sqrt() и sin() , которые вычисляют квадратный корень и синус своего аргумента соответственно.

Второй вид включает в себя функции, которые обрабатывают информацию и возвращают значение, которое показывает, успешно ли была выполнена эта обработка. Примером является библиотечная функция fclose() , которая закрывает файл. Если операция закрытия была завершена успешно, функция возвращает 0, а в случае ошибки она возвращает EOF .

У функций последнего, третьего вида нет явно возвращаемых значений. В сущности, такие функции являются чисто процедурными и никаких значений выдавать не должны. Примером является exit() , которая прекращает выполнение программы. Все функции, которые не возвращают значение, должны объявляться как возвращающие значение типа void . Объявляя функцию как возвращающую значение типа void , вы запрещаете ее применение в выражениях, предотвращая таким образом случайное использование этой функции не по назначению.

Иногда функции, которые, казалось бы, фактически не выдают содержательный результат, все же возвращают какое-то значение. Например, printf() возвращает количество выведенных символов. Если бы нашлась такая программа, которая на самом деле проверяла бы это значение, то это было бы что-то необычное. Другими словами, хотя все функции, за исключением относящихся к типу void , возвращают значения, вовсе не нужно стремиться использовать эти значения во что бы то ни стало. Часто при обсуждении значений, возвращаемых функциями, возникает такой довольно распространенный вопрос: "Неужели не обязательно присваивать возвращенное значение какой-либо переменной? Не повиснет ли оно где-нибудь и не приведет ли это в дальнейшем к каким-либо неприятностям?" Отвечая на этот вопрос, повторим, что присваивание отнюдь не является обязательным, причем отсутствие его не станет причиной каких-либо неприятностей. Если возвращаемое значение не входит ни в один из операторов присваивания, то это значение будет просто отброшено. Отметим также, что такое отбрасывание значения встречается очень часто. Проанализируйте следующую программу, в которой используется функция mul() :

В строке 1 значение, возвращаемое функцией mul() , присваивается переменной z . В строке 2 возвращаемое значение не присваивается, но используется функцией printf() . И наконец, в строке 3 возвращаемое значение теряется, потому что не присваивается никакой из переменных и не используется как часть какого-либо выражения.

Возвращаемые указатели

Хотя с функциями, которые возвращают указатели, обращаются так же, как и с любыми другими функциями, все же будет полезно познакомиться с некоторыми основными понятиями и рассмотреть соответствующий пример. Указатели не являются ни целыми, ни целыми без знака. Они являются адресами в памяти и относятся к особому типу данных. Такая особенность указателей определяется тем, что арифметика указателей (адресная арифметика) работает с учетом параметров базового типа. Например, если указателю на целое придать минимальное (ненулевое) приращение, то его текущее значение станет на четыре больше, чем предыдущее (при условии, что целые значения занимают 4 байта). Вообще говоря, каждый раз, когда значение указателя увеличивается (уменьшается) на минимальную величину, то он указывает на последующий (предыдущий) элемент, имеющий базовый тип указателя. Так как размеры разных типов данных могут быть разными, то компилятор должен знать тип данных, на которые может указывать указатель. Поэтому в объявлении функции, которая возвращает указатель, тип возвращаемого указателя должен декларироваться явно. Например, нельзя объявлять возвращаемый тип как int * , если возвращается указатель типа char * ! Иногда (правда, крайне редко!) требуется, чтобы функция возвращала "универсальный" указатель, т.е. указатель, который может указывать на данные любого типа. Тогда тип результата функции следует определить как void * .

Читайте также:  Iusb3xhc sys синий экран 0x0000007e windows 7

Чтобы функция могла возвратить указатель, она должна быть объявлена как возвращающая указатель на нужный тип. Например, следующая функция возвращает указатель на первое вхождение символа, присвоенного переменной с , в строку s . Если этого символа в строке нет, то возвращается указатель на символ конца строки (‘0’).

Вот небольшая программа, в которой используется функция match() :

Эта программа сначала считывает строку, а затем символ. Потом проводится поиск местонахождения символа в строке. При наличии символа в строке переменная p укажет на него, и программа выведет строку, начиная с найденного символа. Если символ в строке не найден, то p укажет на символ конца строки ( ‘0’ ), причем *p будет представлять логическое значение ЛОЖЬ (false). В таком случае программа выведет сообщение Символа нет .

Функция типа vo >Одним из применений ключевого слова void является явное объявление функций, которые не возвращают значений. Мы уже знаем, что такие функции не могут применяться в выражениях, и указание ключевого слова void предотвращает их случайное использование не по назначению. Например, функция print_vertical() выводит в боковой части экрана свой строчный аргумент по вертикали сверху вниз.

Вот пример использования функции print_vertical() :

private int calc (int a, int b)
<
return a+b;
>

И другая функция, которая использует эту:

private int getResult (void)
<
int res = calc(1,2);
>

так вот чтоб этому x было присвоено хоть какое-нть значение и сделали RETURN.

в результате х будет равен 5

если функция вообще ничего не возвращает, то ей присваивается тип void

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

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

Adblock detector