Сваки Ц програм је колекција функција. Сазнајте све о овим корисним деловима кода за вишекратну употребу, од тога како да их дефинишете до тога шта значи празнина.
Можда сте покрили основну Ц синтаксу, једноставним примерима, и сада се питате како да кренете у креирање већих програма из стварног света. За почетак, желећете да организујете свој код у ефикасне делове, са минимумом понављања. У Ц, као иу већини језика, одговор на ваше проблеме је функција.
Креирање и коришћење функција у Ц-у је једноставно и доноси многе предности. Функције вам омогућавају да разбијете сложене програме на мање делове. Они пружају могућност поновне употребе, како у оквиру вашег оригиналног програма, тако иу сродним библиотекама или другим засебним програмима.
За почетак, мораћете да научите о декларацијама функција, прототиповима, параметрима и повратним изјавама.
Шта су функције у Ц?
У Ц програмирању, функција је именовани део кода који ради нешто када то затражите. Помаже да ваш код буде организован и омогућава вам да користите исту радњу више пута без понављања.
Најједноставнији пример је онај који сте већ користили: функција маин(). Главна функција је посебно посебна јер делује као главна улазна тачка за било који Ц програм. Такође можете да користите функције библиотеке, које су оне које је неко други већ написао, или можете да напишете сопствене функције које дефинише корисник.
Функције: Декларисање, дефинисање и позивање
Ова три аспекта су фундаментална за коришћење функција.
Декларација функције
Ово пружа информације о имену функције, типу повратка и параметрима, омогућавајући њену употребу пре њене пуне дефиниције. Такође се назива прототип функције. Следи ову једноставну синтаксу:
return_type function_name(parameters);
Где:
- ретурн_типе је тип података вредности коју функција враћа. То може бити било који важећи Ц тип података или празнина ако функција не враћа вредност.
- име_функције је назив који дате функцији. Ово ћете користити за касније позивање функције.
- параметрима је листа улазних параметара које функција прихвата, ако их има. Сваки параметар се састоји од типа података праћеног именом параметра одвојеним зарезима.
На пример, ево једноставне декларације функције:
intadd(int a, int b);
Дефиниција функције
Када позовете функцију, она покреће код наведен у њеној дефиницији. Садржи име функције, тип повратка, листу параметара и изјаве које дефинишу њено понашање. Ево синтаксе:
return_type function_name(parameters){
// Function body - code that defines what the function does
// Return a value if applicable
return value;
}
Хајде да разложимо делове синтаксе:
Тело функције: Ово је блок кода затворен у витичасте заграде {}. Садржи упутства која дефинишу шта функција ради када се позове.
Изјава о повратку: Ако функција има тип повратка који није празнина, тхе повратак изјава шаље вредност позиваоцу. Ова вредност треба да одговара наведеном типу повратка.
Ево једноставног примера дефиниције функције:
intadd(int a, int b){
int sum = a + b;
return sum;
}
Позив функције
Баш као и кување, можда имате рецепт (дефиницију функције) и неке састојке (аргументе), али и даље морате да пратите упутства да бисте добили резултат. Позив функције ће покренути функцију са датим аргументима; ево синтаксе:
return_type result = function_name(arguments);
аргументима: Ово су вредности или изрази које прослеђујете функцији као улазе. Одвојите сваки аргумент зарезом. Број, редослед и типови података аргумената треба да одговарају листи параметара функције.
резултат: Ако функција има тип повратка који није празнина, можете ухватити враћену вредност користећи променљиву одговарајућег типа података.
Ево примера позива функције:
#include
// Function prototype
intadd(int a, int b);intmain(){
int x = 5, y = 3;// Call the function and store the result in 'sum'
int sum = add(x, y);
printf("The sum of %d and %d is %d\n", x, y, sum);
return0;
}
// Function definition
intadd(int a, int b){
return a + b;
}
Пратећи ова три корака — декларисање функције, обезбеђивање њене имплементације и њено позивање са одговарајућим аргументима — можете ефикасно користити функције за обављање различитих задатака у свом програм.
Параметри функције и повратне вредности
Параметри су променљиве декларисане у декларацији или дефиницији функције које делују као чувари места за вредности које се прослеђују функцији када се позове. Они вам омогућавају да пренесете податке у функцију, омогућавајући јој да ради и манипулише тим подацима. Повратне вредности су вредности које функција производи и шаље позиваоцу.
Постоје два начина преношења параметара.
Прођите поред вредности
Са овим приступом, позив функције копира вредност стварног аргумента у параметар функције. Промене направљене у параметру унутар функције не утичу на оригинални аргумент.
На пример:
#include
intsquare(int num){
num = num * num;
return num;
}intmain(){
int x = 5;
int y = square(x);// Output: x and y after function call: 5 25
printf("x and y after function call: %d %d\n", x, y);
return0;
}
- Квадратна функција узима целобројни параметар, бр.
- Функција квадрат израчунава квадрат броја, ажурира његову вредност и враћа ову нову вредност.
- Главна функција декларише целобројну променљиву, Икс, и додељује му вредност 5.
- Затим позива функцију квадрата, преносећи јој вредност к. Додељује резултат другој променљивој, и.
- Након позива функције, маин штампа вредности к и и. Вредност к остаје иста јер промена параметра нум унутар квадрата не утиче на оригинално к.
Прођите поред референце
Користећи овај приступ, проследите меморијску адресу (показивач) вредности функцији. Промене параметра унутар функције утичу на оригиналну вредност изван ње.
Показивачи, укључујући њихову употребу као параметара, су један од аспеката Ц који га чини другачијим од језика као што је Питхон.
#include
voidsquare(int *num){
*num = *num * *num;
}intmain(){
int x = 5;
square(&x);
// Output: x after function call: 25
printf("x after function call: %d\n", x);
return0;
}
- Тхе квадрат функција узима целобројни показивач (инт *) параметар, бр. Не враћа вредност.
- Функција квадрат израчунава квадрат вредности која бр садржи и ажурира ту вредност користећи оператор дереференцирања показивача, *.
- Тхе главни функција декларише целобројну променљиву, Икс,и додељује му вредност 5.
- Затим позива квадрат функција са показивачем на Икс користећи оператор адресе: &Икс.
- Након позива функције, маин штампа вредност Икс, који је сада 25 од промена у *бр унутар квадрат функција утиче на оригинал Икс.
Укратко, кључна разлика између ове две методе је како промене параметра унутар функције утичу на оригиналну вредност изван ње. Пролаз по вредности ствара копију, док пролаз по референци (показивач) омогућава директну манипулацију оригиналном вредношћу.
Други језици често имају еквиваленте Ц-ових показивача, али они углавном раде на вишем нивоу. Један пример је Ц# подршка за ван варијабле.
Воид Фунцтионс
Воид функције у Ц програмирању су функције које не враћају вредност. Користите их за обављање радњи или задатака без резултата. Они могу променити своје параметре користећи пасс би референце, али не морају.
Ево примера воид функције:
#include
// Void function with no parameters
voidgreet(){
printf("Hello, MUO!");
}intmain(){
// Call the void function, output: "Hello, MUO!"
greet();
return0;
}
Воид функције су корисне за извођење радњи, штампање порука, модификовање података или извршавање задатака без потребе за враћањем вредности.
Истражите функције у Ц програмирању
Вежбање кроз креирање функција побољшава ваше разумевање разумевања и примене у Ц програмирању. Штавише, повећава читљивост кода и лакоћу одржавања. Уроните у различите примене функција да бисте открили њихове предности.
Када савладате основе Ц функција и желите да изазовете себе, размислите о упуштању у рекурзију.