[ Pobierz całość w formacie PDF ]
.return 0;};// plik second.cppint integerValue = 0;// koniec pliku second.cppUWAGA Zwróć uwagę na użycie operatora zakresu (::) wskazującego, że chodzi o zmiennąglobalną integerValue, a nie lokalną.Problem z dwiema zmiennymi globalnymi zdefiniowanymi poza funkcjami polega na tym, żeposiadają one takie same nazwy i tę samą widoczność, a tym samym powodują błąd linkera.NOWE OKREZLENIEOkreślenie widoczność jest używane do oznaczenia zakresu zdefiniowanego obiektu, bez względuna to, czy jest to zmienna, klasa, czy funkcja.Na przykład, zmienna zadeklarowana i zdefiniowanapoza funkcją posiada zakres pliku, czyli globalny.Zmienna ta jest widoczna od punktu jejzadeklarowania aż do końca pliku.Zmienna o zakresie bloku, czyli lokalna, występuje wewnątrzbloku kodu.Najczęstszymi przykładami takich zmiennych są zmienne zadeklarowane wewnątrzfunkcji.Zakres zmiennych przedstawia poniższy przykład:int globalScopeInt = 5;void f(){int localScopeInt = 10;}int main(){int localScopeInt = 15;{int anotherLocal = 20;int localScopeInt = 30;} return 0;}Pierwsza definicja int, zmienna globalScopeInt, jest widoczna wewnątrz funkcji f() orazmain().Następna definicja znajduje się wewnątrz funkcji f() i ma nazwę localScopeInt.Tazmienna ma zakres lokalny, co oznacza, że jest widoczna tylko w bloku, w którym zostałazdefiniowana.Funkcja main() nie może odwoływać się do zmiennej localScopeInt zdefiniowanej wewnątrzfunkcji f().Gdy funkcja f() kończy działanie, zmienna ta wychodzi poza zakres.Zmienna ta mazakres blokowy.Zwróć uwagę, że zmienna localScopeInt w funkcji main() nie koliduje ze zmiennąlocalScopeInt w funkcji f().Dwie następne definicje, anotherLocal oraz localScopeInt,mają zakres blokowy.Gdy dochodzimy do nawiasu klamrowego zamykającego, zmienne te stająsię niewidoczne.Zauważ, że zmienna localScopeInt ukrywa wewnątrz bloku zmienną localScopeIntzdefiniowaną tuż przed nawiasem klamrowym otwierającym blok (drugą zmiennąlocalScopeInt zdefiniowaną w programie).Gdy program przechodzi poza nawias klamrowyzamykający blok, druga zdefiniowana zmienna localScopeInt znów staje się widoczna.Wszelkie zmiany dokonane w zmiennej localScopeInt zdefiniowanej wewnątrz bloku nie mająwpływu na zawartość innych zmiennych localScopeInt.NOWE OKREZLENIENazwy mogą być łączone wewnętrznie i zewnętrznie.Te dwa terminy stosujemy określającdostępność nazwy w różnych jednostkach kompilacji lub wewnątrz pojedynczej jednostkikompilacji.Nazwa łączona wewnętrznie może być używana tylko w tej jednostce kompilacji, wktórej jest zdefiniowana.Na przykład, zmienna zdefiniowana jako łączona wewnętrznie może byćwykorzystywana przez funkcje w tej samej jednostce kompilacji.Nazwy łączone zewnętrznie sądostępne także w innych jednostkach kompilacji.Poniższy przykład demonstruje łączeniewewnętrzne i zewnętrzne:// plik first.cppint externalInt = 5;const int j = 10;int main(){return 0;}// plik second.cppextern int externalInt;int anExternalInt = 10;const int j = 10;Zmienna externalInt zdefiniowana w pliku first.cpp jest łączona zewnętrznie (ang.external).Choć jest zdefiniowana w pliku first.cpp, może z niej korzystać także plik second.cpp.Dwiezmienne j, występujące w obu plikach, są zmiennymi const, więc domyślnie są łączonewewnętrznie.Możemy przesłonić domyślne łączenie dla const, stosując jawną deklarację, takąjak ta:// plik first.cpextern const int j = 10;// plik second.cppextern const int j;#includeint main(){std::cout
[ Pobierz całość w formacie PDF ]