40 ROZDZIAŁ 7. ZMIENNE Modyfikatory volatile volatile znaczy ulotny. Oznacza to, że kompilator wyłączy dla takiej zmiennej optymalizacje typu zastąpienia przez stałą lub zawartość rejestru, za to wygeneruje kod, który będzie odwoływał się zawsze do komórek pamięci danego obiektu. Zapo- biegnie to błędowi, gdy obiekt zostaje zmieniony przez część programu, która nie ma zauważalnego dla kompilatora związku z danym fragmentem kodu lub nawet przez zupełnie inny proces. volatile float liczba1; float liczba2; { printf ("%d\n%d", liczba1, liczba2); /* instrukcje nie związane ze zmiennymi */ printf ("%d\n%d", liczba1, liczba2); } Jeżeli zmienne liczba1 i liczba2 zmienią się niezauważalnie dla kompilatora to od- czytując : • liczba1 — nastąpi odwołanie do komórek pamięci. Kompilator pobierze nową wartość zmiennej. • liczba2 — kompilator może wypisać poprzednią wartość, którą przechowywał w rejestrze. Modyfikator volatile jest rzadko stosowany i przydaje się w wąskich zastosowa- niach, jak współbieżność i współdzielenie zasobów oraz przerwania systemowe. register Jeżeli utworzymy zmienną, której będziemy używać w swoim programie bardzo często, możemy wykorzystać modyfikator register. Kompilator może wtedy umieścić zmienną w rejestrze, do którego ma szybki dostęp, co przyśpieszy odwołania do tej zmiennej register int liczba ; W nowoczesnych kompilatorach ten modyfikator praktycznie nie ma wpływu na program. Optymalizator sam decyduje czy i co należy umieścić w rejestrze. Nie mamy żadnej gwarancji, że zmienna tak zadeklarowana rzeczywiście się tam znajdzie, chociaż dostęp do niej może zostać przyspieszony w inny sposób. Raczej powinno się unikać tego typu konstrukcji w programie. static Pozwala na zdefiniowanie zmiennej statycznej. “Statyczność” polega na zachowaniu wartości pomiędzy kolejnymi definicjami tej samej zmiennej. Jest to przede wszystkim przydatne w funkcjach. Gdy zdefiniujemy zmienną w ciele funkcji, to zmienna ta bę- dzie od nowa definiowana wraz z domyślną wartością (jeżeli taką podano). W wypadku zmiennej określonej jako statyczna, jej wartość się nie zmieni przy ponownym wywo- łaniu funkcji. Na przykład:
... zobacz całą notatkę
Komentarze użytkowników (0)