main () - главна функция в програма
предаване на параметри по стойност
предаване на параметри чрез псевдоними
предаване на параметри чрез указатели
прототип на функция
предефиниране на функция
предаване параметри на функция main
Основната функция на програма от езика C++ е main. Под функция ще разбираме съставна програма единица, съдържаща един или повече оператори и/или други функции. В този език понятието функция е събирателно и включва както функции които връщат определена стойност, така и функции (процедури, подпрограми), които не връщат стойност - void. Използването на функции е в основата на структурното и обектно ориентираното програмиране. Основната причина за ползването им е намаляване обема на въведения код. Веднъж създадена една функция може да бъде ползвана от много места в програмата. Аналогията с цикъл е непълна. В тялото на цикъл се изпълнява многократно вложения в него съставен оператор, но една функция може да бъде изпълнявана един или повече пъти в зависимост от конкретния алгоритъм, при това от различни места в програма. Една функция може да съдържа в тялото си един или повече цикъла, както и в съставния оператор на един цикъл може да се съдържат една или повече функции. За да се реализира процесът извикване на функция трябва в съответния програмен ред да се запише нейното име и в скоби стойности на предаваните параметри. По принцип една функция връща само една определена стойност от декларирания тип на функцията. Разбира се това твърдение е твърде условно. Има вградени възможности, които позволяват една функция да връща повече от една стойност. Всяка от изброените възможности естествено има свои преимущества и недостатъци.
а) използване на глобална променлива. Преимущество - простота на декларирането. Този подход често се прилага при рекурсивна фанкция обработваща масив. Недостатък - трудно се проследява в кои моменти глобално дефинираната променлива променя стойността си.б) използване на съставна променлива, събирателен тип данни - структура, масив и др.
в) предаване на формални параметри чрез псевдоним;
г) предаване на формални параметри чрез указател
Обърнете внимание на изискването: броя и типа на фактическите предавани параметри трябва да съответства на броя и типа на формалните параметри в декларацията на функцията. Ако на една функция не се предават параметри след името й се записва само двойката малки скоби.
предаване на параметри по стойност
При извикване на една функция в програмния стек се заделя място за кода на функцията и за стойностите на предаваните параметри. Когато се осъществява предаване на параметри по стойност фактическите параметри, с които се извиква функцията, се копират в стека, но функцията работи с копията на предаваните параметри, а не с техните оригинални, т.е. предаваните параметри се съхраняват на две различни места в оперативната памет. След приключване работата на извиканата функция заетата от нея памет би трябвало да се освободи. При изпълнението на функциятастойностите на променливите не се променят, защото функцията няма достъп до тези променливи.
В приложената примерна програма се осъществява предаване на параметри по стойност на извиканата функция.
предаване на параметри чрез псевдоними
Когато при извикване на функция се осъществи предаване на параметри чрез псевдоним, то нейните формални параметри получават адресите на фактическите параметри, с които е била извикана функцията. Ако в хода на работа се променят стойностите на тези параметри, то извикващата функция може да получи като резултат повече от една стойност.
В приложения пример се разменят стойностите на две променливи като се осъществява предаване на параметри чрез псевдоним:
предаване на параметри чрез указатели
При извикване на функция може да се извърши предаване на параметри чрез указатели. Самите формални параметри на функцията се декларират като указатели, които съдържат адреса в паметта на действителните стойности. Да припомним факта, че указател е от целочислен тип. В приложения пример се разменят стойностите на указателите, т.е. на адресите на двете променливи. Примерът е аналогичен с примера за предаване на параметри чрез псевдоним.
прототип на функция
Под прототип на функция ще разбираме указание за компилатора съдържащо тип на функция,
нейното ими и списъкът на типа и имената на аргументите.
При компилиране на една програма се извършва процес на проследяване имената на всички
използвани в тялото на програмата функции.
Това и налага изискването всички използвани библиотечни файлове да се декларират в заглавната част на програмата.
От своя страна всяка потребителска дефинирана функция може да извиква друга, потребителски
дефинирана функция. Условието е извикваната функция да е описана преди извикващата функция.
При относително малка програма този процес може лесно да се проследи, но при големи програми
проблемът се усложнява. Езикът за програмиране дава възможност за предварително деклариране
прототип на функция преди тялото на основната функция main, и някъде в след тялото на главната
функция main да се опише цялата функция - тялото на този прототип.
Използваните в примера глобални променливи са по-скоро за илюстрация за работа с глобално декларирани променливи.
В следващата примерна програма е използвана функция чрез деклариране на нейния прототип.
предефиниране на функция
Под предефиниране на функция ще разбираме припокриване имената на две функции. В тялото на една функция всяка променлива има собствено уникално име. В тялото на една програма всяка функция има собствено уникално име. Езикът за програмиране предоставя възможност за предефиниране на функция, т.е. да съществуват две отделни функции с едни и същи имена, но само ако двете функции трябва да връщат различен тип данни.
Пример за предефиниране на функция
предаване параметри на функция main
Има определени случаи, когато е наложително предаване праметри на функция main. Един пример: имаме съвкупност от данни въведени в различни файлове. Дали данните трябва да се обединяват, да се прекодират, да се извърши определена обработка на информацията в тях не е от принципно значение в случая. От друга страна има изработен програмен инструмент, на който чрез конзолата или чрез файл за пакетна обработка се предават пълната файлова спецификация на всички подлежащи на обработката файлове. Като входна информация са необходими брой аргументи и стойност на конкретния брой аргументи.
На функция main могат да се подават 3 параметъра, като всеки от тях има име служебна дума на езика:а) параметър argc от тип int - броя на предаваните аргументи.
б) параметър argv е масив от указатели към масив от низове. Параметърът с индекс 0 е името на стартиралото приложение, всички останали параметри се разделят с пробел. Броят им трябва да съответства на предадената стойност за argc;
в) параметър envp - указател към char и дава информация за средата (environment), в която се изпълнява програмата. Този параметър в общия случай не задължителен.
Следващата примерна програма трябва да бъде компилирана до изпълним файл и стартирана в конзолен режим.
Задачи с подобни функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени примери.