декларация за връщане

Механизмът на връщане е описан в Глава 3. Както вероятно си спомняте, той казва, че това твърдение има две важни цели. На първо място, тя осигурява незабавно излизане от функция, т.е. принудени да се изпълнява програма за прехвърляне на контрол на кода, който се нарича функция. На второ място, това твърдение може да се използва, за да върне стойност. Следващите раздели описват точно как можете да използвате изявление замяна.







На връщане от функция

Функцията може да прекрати изпълнението и извършва връщане към викащата програма по два начина. Първият метод се използва, когато след последното изявление на функцията отговаря затварящата скоба къдрава (>). (Разбира се, това е просто жаргон, защото в този обект код скоба там!) Така например, pr_reverse () функция в следната програма просто показва низ в обратен ред ми харесва С и след това се връща контрола на извикващата програма.

След като низ се показва на екрана, pr_reverse функция () "не правят нищо повече", така че тя се връща там, където е наречена.

Но на практика, а не толкова много функции, които използват точно такъв начин, до завършване. Повечето функции да довършват изречението се използват, за да се върне - или защото трябва да връща стойност, или да направят кода по-лесно и по-ефективно функция.

Функцията може да бъде няколко оператори замяна. Например, функцията следната програма find_substr () връща в изходна позиция на подниз в същия ред или връща -1 ако подниза противоречие, не е намерено. В тази функция, два изявление връщане се използва за опростяване на кодиране.

Връщайки ценности

Всички функции, с изключение на тези, които се отнасят до празнотата тип. връща стойност. Тази стойност е показана чрез изразяването в отчета за връщане. S89 стандарт позволява изпълнението на връщащата без израз в самата функция, типа на която е различна от празнотата. В този случай, все едно има връщане на произволна стойност. Но това състояние на нещата, меко казано, не е добър! Поради това, в стандарт C99 (и в C ++), при условие, че функцията на тип, различен от празнината. в замяна е необходимо да се уточни изявление върнатата стойност. Това означава, че според C99, ако по някаква функция се посочва, че тя връща стойност, а след това от вътрешната страна на тази функция от изявления връщане следва да бъдат отразени. Въпреки това, ако функцията на даден вид, различен от празнотата. ще продължи до края (тоест, докато неговата затваряща скоба), той се връща произволно (непредсказуемо от гледна точка на програмата за разработчик на!) стойност. Въпреки че няма синтактична грешка, това е сериозен пропуск, и трябва да се избягват такива ситуации.







Ако функцията не е обявено, че са от тип нищожно. може да се използва като операнд в експресията. Ето защо, всеки от следните твърдения е вярно:

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

Това е погрешно. Ако компилатор в някоя програма намира израз, след което го маркирате като погрешна и програмата няма да се компилира.

Програмата може да използвате функциите на трите вида. Първият тип - просто изчисление. Тези функции са проектирани да изпълняват операции на своите аргументи и да се върне получената стойност на тези операции. Изчислителна функция е функция на "чисто". Като примери могат да се споменат стандарт функция библиотека SQRT () и грях (). който се изчислява корен квадратен и синуса на тезата си, съответно.

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

Функцията на последния, трети тип не е било изрично се връщат стойности. В действителност, тези функции са чисто процедурни и няма стойности не трябва да издават. Пример за това е изход (). който спира изпълнението на програмата. Всички функции, които не връщат стойност, трябва да бъдат обявени за връщане на стойност от тип нищожно. Обявяването като функция връща стойност от тип нищожно. Забранявам ти използването му в изрази, като по този начин предотвратяват случайния използването на тази функция за други цели.

Понякога функции, които ще изглеждат в действителност не дават значими резултати, но все пак връщат стойност. Например, ФОРМАТ () връща броя на изходните символи. Ако имаше такава програма, която всъщност ще проверява тази стойност, а след това ще бъде нещо специално. С други думи, въпреки че всички функции с изключение на тези, свързани с празнотата тип. стойности за връщане не е нужно да се стремим да използваме тези ценности, каквото и да става. Често при обсъждането на стойностите на функцията за връщане, там е доста често срещан въпрос: "Не е ли необходимо да се възложи на върнатата стойност на променлива не е дали той ще затвори някъде и дали тя ще доведе в бъдеще до никакви проблеми" При отговора на този въпрос, ние повтаряме, че задачата не е задължително, както и липсата на това няма да доведе до неприятности. Ако върнатата стойност не е включена в някоя от оператори за присвояване, стойността се просто се изхвърля. Имайте предвид също, че отхвърлянето на ценностите е много чести. Помислете за следната програма, която използва функцията MUL ().

В съответствие 1, стойността върната от MUL (). възложени на променливата Z. В съответствие 2, стойността на замяна се определя, но използва ФОРМАТ (функция). И накрая, в ред 3, върнатата стойност е загубено, защото тя не се определя на всяка от променливите и не се използва като част от израз.

връща указател

За да може да се върне функция показалеца, тя трябва да бъде обявен за връщане указател към правилния тип. Така например, следната функция връща указател към първата поява на знак, който се определя в различна. низ с. Ако този символ в низа не присъства, той се връща указател към края на линията на символи ( "0").

Ето една малка програма, която използва функцията за мач ().

Тази програма чете първия ред, а след това на символа. След това той заема мястото на символ в лентата за търсене. Ако има знак в низ променлива р ще сочи към него, и програмата ще покаже линия, започваща с характера намерен. Ако не бъде намерен на характера в низа, а след това ще покаже, стр края на линията на символи ( "0"), където * р ще представлява фалшивите логическа стойност (фалшиво). В този случай, програмата показва съобщение Символ не.

функция празнота

Ето функция пример print_vertical ().