Statische functies in de C-computertaal

Statische Functies In De C Computertaal



'statisch' is een gereserveerd woord in de computertaal, C. Het is een opslagklasse-specificatie die met functies kan worden gebruikt. Een C-programma kan meer dan één bestand hebben. Slechts één van de bestanden zou de functie C main() moeten hebben. In dit artikel worden slechts twee bestanden beschouwd: het bestand met de C main()-functie die mainFile.c wordt genoemd en het andere bestand zonder de hoofdfunctie die otherFile.c wordt genoemd

Algemene functie

Een globale functie is een functie die is gedefinieerd in een C-bestand vóór de functie main(). Zelfs de functie main() is een globale functie, maar de functie main() is niet de focus in dit artikel. In de taal C zijn door de programmeur gedefinieerde functies meestal globale functies en worden ze gewoon functies genoemd.

Een globale functie kan in elk bereik in zijn bestand worden aangeroepen. Om een ​​globale functie in een ander bestand te laten zien, moet het prototype ervan in dat andere bestand worden gedeclareerd (zie hieronder). Om te voorkomen dat een functie die in het ene bestand is gedefinieerd, in een ander bestand wordt gezien, laat u de definitie voorafgaan door de gereserveerd woord, statisch. Daarmee zou de statische functie alleen een globale functie zijn in zijn eigen bestand en zal niet worden gezien in een ander bestand.







Een globale functie gedefinieerd in otherFile.c kan dus overal in otherFile.c worden gezien. Om het te zien in mainFile.c, moet het prototype worden gedeclareerd in mainFile.c (zie hieronder). De definitie in otherFile.c mag niet worden voorafgegaan door 'static'. Om te voorkomen dat het wordt gezien in mainFile.c, moet de definitie in otherFile.c statisch worden gemaakt, een komma verwijderen door er het woord static voor te zetten.



Dit artikel illustreert de statische functie in de computertaal, C beginnend met de betekenis van functie-prototype en het gebruik ervan in een C-programma van twee of meer bestanden.



Compilatie van de bestanden, mainFile.c en otherFile.c, kan worden gedaan met het volgende Bash-terminalcommando:





gcc hoofdbestand. c anderBestand. c - die temp. exe

temp.exe is de naam van het resulterende enkele uitvoerende bestand.

Artikel Inhoud



– Inleiding – zie hierboven

– Prototype C-functie

– Algemene functie

– Statische functie juist

- Conclusie

C Functie Prototype

Overweeg de globale functiedefinitie:

char * fn1 ( char * gestreept ) {
opbrengst gestreept ;
}

Het prototype voor deze functie is:

char * fn1 ( char * gestreept ) ;

Het is de functiehandtekening, eindigend op een puntkomma.

Laat nu de inhoud van de otherFile.c zijn:

char * fn1 ( char * gestreept ) {

opbrengst gestreept ;

}

Neem aan dat het bestand otherFile.c alleen de definitie heeft van de globale functie fn1(). Laat nu de inhoud van het bestand, mainFile.c, zijn:

#include

char * fn1 ( char * gestreept ) ;

int hoofd ( )
{
char * str = fn1 ( 'gezien' ) ;
printf ( '%s \n ' , str ) ;

opbrengst 0 ;
}

Het begint met het opnemen van de -header (bibliotheek). Dit wordt gevolgd door de prototypedeclaratie van de functie, fn() van het andere bestand.

Dit hoofdbestand heeft niet de definitie van een andere globale functie dan de standaard main()-functie. In de hoofdfunctie roept de eerste instructie de functie fn1() aan die is gedefinieerd in het andere bestand. Deze aanroep zou niet effectief zijn als het prototype van fn1() niet was gedeclareerd in dit bestand, mainFile.c.

Als de lezer de bovenstaande twee bestanden heeft gecodeerd, kan hij het programma compileren tot één uitvoerbaar bestand met de volgende opdracht:

gcc hoofdbestand. c anderBestand. c - die temp. exe

druk op de Enter-toets aan het einde van de regel. De uitvoer moet 'gezien' zijn.

Algemene functie

Het bestand mainFile.c kan als volgt worden gewijzigd:

#include

char * fn1 ( char * gestreept ) ;

char * fn ( char * st ) {
opbrengst st ;
}

int hoofd ( )
{
char * str1 = fn1 ( 'gezien' ) ;
printf ( '%s \n ' , str1 ) ;
char * str2 = fn ( 'Globaal gezien in zijn dossier.' ) ;
printf ( '%s \n ' , str2 ) ;
opbrengst 0 ;
}

Nu zijn er twee globale functies in het bestand, mainFile.c. De namen van de functies zijn fn() en main(). dfn() is een globale functie. Het is gezien in de main() functie local scope, door een aanroep. In de taal C wordt een globale functie in de globale scope, zoals fn(), eenvoudigweg een functie genoemd. Ook wordt de globale functie fn1() in het bestand otherFile.c eenvoudigweg een functie genoemd.

Als de twee bestanden opnieuw worden gecompileerd in temp.exe, is het resultaat:

gezien

Globaal gezien in zijn bestand.

Opmerking: de functiedefinitie voor fn() kan ook zichtbaar worden gemaakt in het andere bestand, otherFile.c. Om dat te bereiken, moet de prototypeverklaring als volgt in otherFile.c staan:

char * fn ( char * st ) ;

eindigend met een puntkomma. Deze activiteit wordt overgelaten als een oefening voor de lezer.

Statische functie juist

Uit de bovenstaande discussie kan een functie in elk bereik (overal) in zijn bestand worden gezien. Het kan ook worden gezien in een ander bestand, voor hetzelfde programma, als het prototype daar is gedeclareerd. Om te voorkomen dat de definitie van het bestand in een ander bestand wordt gezien, maakt u de definitie statisch door er het gereserveerde woord statisch voor te zetten. Zelfs als het prototype in het andere bestand wordt gedeclareerd, zal het nog steeds niet in het andere bestand worden gezien. De programmabestanden worden niet eens gecompileerd. Om dit te illustreren, laat de inhoud van het bestand, otherFile.c zijn:

statisch char * fn1 ( char * gestreept ) {

opbrengst gestreept ;

}

Dit is dezelfde inhoud in het bestand, otherFile.c, als voorheen, maar met het voorgaande gereserveerde woord, statisch. De inhoud van het bestand mainFile.c blijft hetzelfde. Als een poging wordt gedaan om de programmabestanden te compileren met het commando,

gcc hoofdbestand. c anderBestand. c - die temp. exe

de compiler zou een foutmelding geven, wat betekent dat het programma niet compileerde. Zelfs als de prototypedeclaratie in het andere bestand ook wordt voorafgegaan door static, zullen de programmabestanden nog steeds niet compileren.

Conclusie

Een functiedefinitie in de C-taal is een globale functie. Deze functie kan in elk bereik in zijn bestand worden aangeroepen (gezien). Om deze functie in een ander bestand te zien, zoals het hoofdbestand, moet de prototypedeclaratie in dat andere bestand worden getypt. Om te voorkomen dat deze functie in het andere bestand wordt gezien, maakt u de definitie statisch door er het gereserveerde woord statisch voor te zetten.