Globalna funkcija
Globalna funkcija je funkcija definirana u C datoteci prije funkcije main(). Čak je i funkcija main() globalna funkcija, ali funkcija main() nije fokus ovog članka. U jeziku C, programerski definirane funkcije obično su globalne funkcije i jednostavno se nazivaju funkcijama.
Globalna funkcija može se pozvati u bilo kojem opsegu u svojoj datoteci. Kako bi se globalna funkcija mogla vidjeti u drugoj datoteci, njezin prototip mora biti deklariran u toj drugoj datoteci (pogledajte dolje.) Kako biste spriječili da se funkcija definirana u jednoj datoteci vidi u drugoj datoteci, ispred definicije stavite rezervirana riječ, statična. Time bi statička funkcija bila globalna funkcija samo u vlastitoj datoteci i neće se vidjeti u drugoj datoteci.
Dakle, globalna funkcija definirana u otherFile.c može se vidjeti bilo gdje u otherFile.c. Da bi se vidio u mainFile.c, njegov prototip mora biti deklariran u mainFile.c (vidi dolje.) Njegovoj definiciji u otherFile.c ne bi trebao prethoditi 'static'. Kako bi se spriječilo da se vidi u mainFile.c, njegova definicija u otherFile.c mora biti staticremaknuta zarezom tako što će se ispred nje staviti riječ, static.
Ovaj članak ilustrira statičku funkciju u računalnom jeziku, C počevši od značenja prototipa funkcije i njegovu upotrebu u C programu od dvije ili više datoteka.
Kompilacija datoteka, mainFile.c i otherFile.c, može se izvršiti sljedećom Bash terminalskom naredbom:
gcc glavna datoteka. c otherFile. c - ta temp. egz
temp.exe naziv je rezultirajuće pojedinačne izvršne datoteke.
Sadržaj članka
Prototip C funkcije
Razmotrite definiciju globalne funkcije:
char * fn1 ( char * stri ) {povratak stri ;
}
Prototip ove funkcije je:
char * fn1 ( char * stri ) ;To je signatura funkcije koja završava točkom i zarezom.
Sada neka sadržaj otherFile.c bude:
char * fn1 ( char * stri ) {povratak stri ;
}
Pretpostavimo da datoteka otherFile.c ima samo definiciju globalne funkcije fn1(). Sada neka sadržaj datoteke, mainFile.c, bude:
#includechar * fn1 ( char * stri ) ;
int glavni ( )
{
char * str = fn1 ( 'vidjeno' ) ;
printf ( '%s \n ' , str ) ;
povratak 0 ;
}
Započinje uključivanjem
Ova glavna datoteka nema definiciju nijedne globalne funkcije osim zadane funkcije main(). U glavnoj funkciji, prva izjava poziva funkciju fn1() definiranu u drugoj datoteci. Ovaj poziv ne bi bio učinkovit da prototip fn1() nije deklariran u ovoj datoteci, mainFile.c.
Ako je čitatelj kodirao gornje dvije datoteke, tada može kompajlirati program u jednu izvršnu datoteku sa sljedećom naredbom:
gcc glavna datoteka. c otherFile. c - ta temp. egzpritiskom na tipku Enter na kraju retka. Rezultat bi trebao biti 'viđen'.
Globalna funkcija
Datoteka mainFile.c može se modificirati na sljedeći način:
#includechar * fn1 ( char * stri ) ;
char * fn ( char * sv ) {
povratak sv ;
}
int glavni ( )
{
char * str1 = fn1 ( 'vidjeno' ) ;
printf ( '%s \n ' , str1 ) ;
char * str2 = fn ( 'Globalno viđeno u dosjeu.' ) ;
printf ( '%s \n ' , str2 ) ;
povratak 0 ;
}
Postoje dvije globalne funkcije u datoteci, mainFile.c. Nazivi funkcija su fn() i main(). dfn() je globalna funkcija. Viđeno je u lokalnom opsegu funkcije main(), pozivom. U jeziku C, globalna funkcija u globalnom opsegu, kao što je fn(), jednostavno se naziva funkcija. Također, globalna funkcija, fn1() u datoteci, otherFile.c se jednostavno naziva funkcijom.
Ako se dvije datoteke ponovno kompajliraju u temp.exe, rezultat će biti:
vidioGlobalno se vidi u njegovoj datoteci.
Napomena: definicija funkcije za fn() također se može vidjeti u drugoj datoteci, otherFile.c. Da biste to postigli, imajte njegovu deklaraciju prototipa u otherFile.c, kako slijedi:
char * fn ( char * sv ) ;završava točkom i zarezom. Ova aktivnost je ostavljena kao vježba za čitatelja.
Pravilna statička funkcija
Iz gornje rasprave, funkcija se može vidjeti u bilo kojem opsegu (bilo gdje) u svojoj datoteci. Također se može vidjeti u drugoj datoteci, za isti program, ako je tamo deklariran njegov prototip. Kako biste spriječili da se definicija datoteke vidi u drugoj datoteci, učinite definiciju statičnom tako da ispred nje stavite rezerviranu riječ static. Čak i ako je njegov prototip deklariran u drugoj datoteci, i dalje se neće vidjeti u drugoj datoteci. Programske datoteke neće se niti kompilirati. Da bismo ovo ilustrirali, neka sadržaj datoteke, otherFile.c bude:
statički char * fn1 ( char * stri ) {povratak stri ;
}
Ovo je isti sadržaj u datoteci, otherFile.c, kao i prije, ali s prethodnom rezerviranom riječi, static. Sadržaj datoteke mainFile.c ostaje isti. Ako se pokuša prevesti programske datoteke pomoću naredbe,
gcc glavna datoteka. c otherFile. c - ta temp. egzkompajler bi izdao poruku o grešci, što znači da se program nije kompilirao. Čak i ako deklaraciji prototipa u drugoj datoteci također prethodi static, programske datoteke se i dalje neće kompilirati.
Zaključak
Definicija funkcije u jeziku C je globalna funkcija. Ova se funkcija može pozvati (vidjeti) u bilo kojem opsegu u svojoj datoteci. Kako bi se ova funkcija mogla vidjeti u drugoj datoteci, kao što je glavna datoteka, njezina deklaracija prototipa mora biti upisana u tu drugu datoteku. Kako biste spriječili da se ova funkcija vidi u drugoj datoteci, učinite njezinu definiciju statičnom tako da ispred nje stavite rezerviranu riječ, static.