Funkcje statyczne w języku komputerowym C

Funkcje Statyczne W Jezyku Komputerowym C



„statyczny” to zastrzeżone słowo w języku komputerowym C. Jest to specyfikator klasy pamięci, którego można używać z funkcjami. Program w C może mieć więcej niż jeden plik. Tylko jeden z plików powinien mieć funkcję C main(). W tym artykule rozważane są tylko dwa pliki: plik z funkcją C main() o nazwie mainFile.c i drugi plik bez funkcji main o nazwie otherFile.c

Funkcja globalna

Funkcja globalna to funkcja zdefiniowana w pliku C przed funkcją main(). Nawet funkcja main() jest funkcją globalną, ale funkcja main() nie jest przedmiotem tego artykułu. W języku C funkcje zdefiniowane przez programistę są zwykle funkcjami globalnymi i po prostu określane są jako funkcje.

Funkcję globalną można wywołać w dowolnym zakresie w swoim pliku. Aby funkcja globalna była widoczna w innym pliku, jej prototyp musi być zadeklarowany w tym innym pliku (patrz niżej). Aby funkcja zdefiniowana w jednym pliku nie była widziana w innym pliku, poprzedź definicję przedrostkiem słowo zastrzeżone, statyczne. Dzięki temu funkcja statyczna byłaby funkcją globalną tylko we własnym pliku i nie będzie widoczna w innym pliku.







Tak więc globalna funkcja zdefiniowana w otherFile.c może być widoczna w dowolnym miejscu w otherFile.c. Aby było widoczne w pliku mainFile.c, jego prototyp musi być zadeklarowany w pliku mainFile.c (patrz poniżej). Jego definicja w otherFile.c nie powinna być poprzedzona słowem „static”. Aby nie był widziany w pliku mainFile.c, jego definicja w otherFile.c musi być staticusunięcie przecinka poprzez poprzedzenie go słowem static.



Ten artykuł ilustruje funkcję statyczną w języku komputerowym, C rozpoczynającą się od znaczenia prototypu funkcji i jej użycie w programie C składającym się z dwóch lub więcej plików.



Kompilację plików mainFile.c i otherFile.c można wykonać za pomocą następującego polecenia terminala Bash:





gcc mainFile. c innyPlik. c - że temp. exe

temp.exe to nazwa wynikowego pojedynczego pliku wykonywalnego.

Treść artykułu



– Wstęp – patrz wyżej

– Prototyp funkcji C

– Funkcja globalna

– Funkcja statyczna Właściwa

- Wniosek

C Prototyp funkcji

Rozważ definicję funkcji globalnej:

zwęglać * fn1 ( zwęglać * spięć ) {
zwrócić spięć ;
}

Prototypem tej funkcji jest:

zwęglać * fn1 ( zwęglać * spięć ) ;

Jest to sygnatura funkcji, zakończona średnikiem.

Teraz niech zawartość otherFile.c będzie:

zwęglać * fn1 ( zwęglać * spięć ) {

zwrócić spięć ;

}

Załóżmy, że plik innyPlik.c ma tylko definicję funkcji globalnej fn1(). Teraz niech zawartość pliku mainFile.c będzie:

#włącz

zwęglać * fn1 ( zwęglać * spięć ) ;

int Główny ( )
{
zwęglać * str = fn1 ( 'widziany' ) ;
printf ( '%s \n ' , str ) ;

zwrócić 0 ;
}

Zaczyna się od włączenia nagłówka (biblioteki). Po tym następuje deklaracja prototypu funkcji, fn() innego pliku.

Ten plik główny nie zawiera definicji żadnej funkcji globalnej innej niż domyślna funkcja main(). W funkcji main pierwsza instrukcja wywołuje funkcję fn1() zdefiniowaną w innym pliku. To wywołanie nie byłoby skuteczne, gdyby prototyp funkcji fn1() nie został zadeklarowany w tym pliku mainFile.c.

Jeśli czytelnik zakodował powyższe dwa pliki, to może skompilować program do jednego pliku wykonywalnego za pomocą następującego polecenia:

gcc mainFile. c innyPlik. c - że temp. exe

naciskając klawisz Enter na końcu wiersza. Wyjście powinno być „widziane”.

Funkcja globalna

Plik mainFile.c można zmodyfikować w następujący sposób:

#włącz

zwęglać * fn1 ( zwęglać * spięć ) ;

zwęglać * fn ( zwęglać * st ) {
zwrócić st ;
}

int Główny ( )
{
zwęglać * str1 = fn1 ( 'widziany' ) ;
printf ( '%s \n ' , str1 ) ;
zwęglać * str2 = fn ( „Globalny w jego aktach”. ) ;
printf ( '%s \n ' , str2 ) ;
zwrócić 0 ;
}

Teraz w pliku znajdują się dwie globalne funkcje, mainFile.c. Nazwy funkcji to fn() i main(). dfn() jest funkcją globalną. Zostało to zaobserwowane w lokalnym zasięgu funkcji main() przez wywołanie. W języku C funkcja globalna w zasięgu globalnym, taka jak fn(), jest po prostu określana jako funkcja. Również funkcja globalna fn1() w pliku otherFile.c jest po prostu określana jako funkcja.

Jeśli te dwa pliki zostaną ponownie skompilowane do temp.exe, wynik będzie następujący:

widziany

Global widziany w swoim pliku.

Uwaga: definicja funkcji dla fn() może być również widoczna w innym pliku, otherFile.c. Aby to osiągnąć, zrób deklarację prototypu w otherFile.c w następujący sposób:

zwęglać * fn ( zwęglać * st ) ;

kończący się średnikiem. Ta czynność jest pozostawiona jako ćwiczenie dla czytelnika.

Właściwa funkcja statyczna

Z powyższej dyskusji wynika, że ​​funkcję można zobaczyć w dowolnym zakresie (w dowolnym miejscu) w swoim pliku. Można go również zobaczyć w innym pliku, dla tego samego programu, jeśli jest tam zadeklarowany jego prototyp. Aby definicja pliku nie była widziana w innym pliku, ustaw definicję jako statyczną poprzedzając ją słowem zastrzeżonym, static. Nawet jeśli jego prototyp jest zadeklarowany w innym pliku, nadal nie będzie widoczny w innym pliku. Pliki programu nawet się nie skompilują. Aby to zilustrować, niech zawartość pliku otherFile.c będzie:

statyczny zwęglać * fn1 ( zwęglać * spięć ) {

zwrócić spięć ;

}

Jest to ta sama zawartość w pliku otherFile.c, co poprzednio, ale z poprzedzającym słowem zastrzeżonym, static. Zawartość pliku mainFile.c pozostaje taka sama. Jeśli podjęta zostanie próba skompilowania plików programu za pomocą polecenia,

gcc mainFile. c innyPlik. c - że temp. exe

kompilator wyświetli komunikat o błędzie, co oznacza, że ​​program się nie skompilował. Nawet jeśli deklaracja prototypu w innym pliku jest również poprzedzona przez static, pliki programu i tak nie będą się kompilować.

Wniosek

Definicja funkcji w języku C jest funkcją globalną. Ta funkcja może być wywołana (widziana) w dowolnym zakresie w swoim pliku. Aby ta funkcja była widoczna w innym pliku, takim jak plik główny, jej deklaracja prototypu musi być wpisana w tym innym pliku. Aby ta funkcja nie była widoczna w innym pliku, ustaw jej definicję jako statyczną, poprzedzając ją słowem zastrzeżonym, static.