Globálna funkcia
Globálna funkcia je funkcia definovaná v súbore C pred funkciou main(). Dokonca aj funkcia main() je globálna funkcia, ale funkcia main() nie je zameraná v tomto článku. V jazyku C sú funkcie definované programátorom zvyčajne globálne funkcie a jednoducho sa označujú ako funkcie.
Globálnu funkciu možno volať v akomkoľvek rozsahu v jej súbore. Aby bola globálna funkcia viditeľná v inom súbore, jej prototyp musí byť deklarovaný v tomto inom súbore (pozri nižšie). Ak chcete zabrániť tomu, aby sa funkcia definovaná v jednom súbore zobrazovala v inom súbore, pred definíciu rezervované slovo, statické. Vďaka tomu by statická funkcia bola globálnou funkciou iba vo svojom vlastnom súbore a v inom súbore ju nebude vidieť.
Takže globálnu funkciu definovanú v otherFile.c možno vidieť kdekoľvek v otherFile.c. Aby ho bolo možné vidieť v mainFile.c, jeho prototyp musí byť deklarovaný v mainFile.c (pozri nižšie). Jeho definícii v otherFile.c by nemal predchádzať „statický“. Aby sa predišlo jeho videniu v mainFile.c, jeho definícia v otherFile.c musí byť staticky odstránená čiarka tak, že pred ňou bude slovo, static.
Tento článok ilustruje statickú funkciu v počítačovom jazyku C počnúc významom prototyp funkcie a jej použitie v programe C s dvoma alebo viacerými súbormi.
Kompiláciu súborov, mainFile.c a otherFile.c, je možné vykonať pomocou nasledujúceho príkazu terminálu Bash:
hlavný súbor gcc. c inýSúbor. c - tá tepl. exe
temp.exe je názov výsledného jedného spusteného súboru.
Obsah článku
Prototyp funkcie C
Zvážte definíciu globálnej funkcie:
char * fn1 ( char * stri ) {vrátiť stri ;
}
Prototyp tejto funkcie je:
char * fn1 ( char * stri ) ;Je to podpis funkcie, ktorý končí bodkočiarkou.
Teraz nech je obsah otherFile.c:
char * fn1 ( char * stri ) {vrátiť stri ;
}
Predpokladajme, že súbor otherFile.c má iba definíciu globálnej funkcie fn1(). Teraz nech je obsah súboru mainFile.c:
#includechar * fn1 ( char * stri ) ;
int hlavné ( )
{
char * str = fn1 ( 'videl' ) ;
printf ( '%s \n ' , str ) ;
vrátiť 0 ;
}
Začína sa zahrnutím hlavičky (knižnice)
Tento hlavný súbor nemá definíciu žiadnej globálnej funkcie okrem predvolenej funkcie main(). Vo funkcii main volá prvý príkaz funkciu fn1() definovanú v druhom súbore. Toto volanie by nebolo účinné, ak by prototyp fn1() nebol deklarovaný v tomto súbore, mainFile.c.
Ak čitateľ zakódoval dva vyššie uvedené súbory, potom môže program skompilovať do jedného spustiteľného súboru pomocou nasledujúceho príkazu:
hlavný súbor gcc. c inýSúbor. c - tá tepl. exestlačením klávesu Enter na konci riadku. Výstup by mal byť „videný“.
Globálna funkcia
Súbor mainFile.c je možné upraviť nasledovne:
#includechar * fn1 ( char * stri ) ;
char * fn ( char * sv ) {
vrátiť sv ;
}
int hlavné ( )
{
char * str1 = fn1 ( 'videl' ) ;
printf ( '%s \n ' , str1 ) ;
char * str2 = fn ( 'V jeho spise vidno globálne.' ) ;
printf ( '%s \n ' , str2 ) ;
vrátiť 0 ;
}
Teraz sú v súbore dve globálne funkcie, mainFile.c. Názvy funkcií sú fn() a main(). dfn() je globálna funkcia. Bolo to vidieť v lokálnom rozsahu funkcie main() prostredníctvom volania. V jazyku C sa globálna funkcia v globálnom rozsahu, ako napríklad fn(), jednoducho označuje ako funkcia. Aj globálna funkcia fn1() v súbore otherFile.c sa jednoducho označuje ako funkcia.
Ak sa tieto dva súbory znova skompilujú do súboru temp.exe, výstup bude:
videnýGlobálne vidieť v jeho súbore.
Poznámka: Definíciu funkcie pre fn() je možné vidieť aj v inom súbore otherFile.c. Aby ste to dosiahli, majte deklaráciu prototypu v otherFile.c takto:
char * fn ( char * sv ) ;končiace bodkočiarkou. Táto aktivita je ponechaná ako cvičenie pre čitateľa.
Správna statická funkcia
Z vyššie uvedenej diskusie možno vidieť funkciu v akomkoľvek rozsahu (kdekoľvek) v jej súbore. Môže sa tiež zobraziť v inom súbore pre rovnaký program, ak je tam deklarovaný jeho prototyp. Aby ste zabránili tomu, aby sa definícia súboru zobrazovala v inom súbore, urobte definíciu statickou tak, že pred ňou bude rezervované slovo, static. Aj keď je jeho prototyp deklarovaný v inom súbore, stále sa v inom súbore nezobrazí. Programové súbory sa ani neskompilujú. Aby sme to ilustrovali, nech je obsah súboru otherFile.c:
statické char * fn1 ( char * stri ) {vrátiť stri ;
}
Toto je rovnaký obsah v súbore otherFile.c ako predtým, ale s predchádzajúcim rezervovaným slovom, statickým. Obsah súboru mainFile.c zostáva rovnaký. Ak sa pokúsite skompilovať programové súbory pomocou príkazu,
hlavný súbor gcc. c inýSúbor. c - tá tepl. exekompilátor vydá chybové hlásenie, čo znamená, že program sa neskompiloval. Aj keď deklarácii prototypu v inom súbore predchádza statický, programové súbory sa stále neskompilujú.
Záver
Definícia funkcie v jazyku C je globálna funkcia. Túto funkciu možno volať (vidieť) v akomkoľvek rozsahu v jej súbore. Aby bola táto funkcia viditeľná v inom súbore, ako je hlavný súbor, jej prototypová deklarácia musí byť napísaná v tomto inom súbore. Ak chcete zabrániť tomu, aby sa táto funkcia zobrazovala v inom súbore, urobte jej definíciu statickou tak, že pred ňou bude rezervované slovo, static.