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
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łączzwę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
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. exenaciskają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łączzwę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:
widzianyGlobal 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. exekompilator 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.