DODATEK A PRZEWODNIK JĘZYKA C________■
Kwalifikatory typu wskazują specjalne właściwości deklarowanych obiektów.
kwalifikator-typu:
const
vo!atile
Kwalifikatory mogą wystąpić z każdym specyfikatorem typu. Obiekt const (stały) może być inicjowany, ale nie można mu później przypisać wartości. Dla obiektów volatile (ulotny) nie ma interpretacji niezależnej od implementacji.
Właściwości const i volatile są w ANSI C nowe. Kwalifikator const służy do wskazania obiektów, które można umieścić w pamięci chronionej przed zapisem i, być może, zwiększyć podatność programu na optymalizację. Kwalifikator volatile służy do wyłączenia deklarowanego obiektu z ewentualnej optymalizacji. Na przykład w maszynach z mapowaną pamięcią wejścia-wyjścia wskaźnik do rejestru urządzenia mógłby być zadeklarowany jako wskaźnik do volatile, aby zapobiec usunięciu przez kompilator pozornie zbędnych odwołań do obiektu poprzez ten wskaźnik*. Kompilator może ignorować specyfikatory const, ale powinien sygnalizować jawne próby zmiany wartości obiektów o takim specyfikatorze.
Struktura jest obiektem składającym się z ciągu nazwanych składowych o różnych typach. Unia jest obiektem, który w danej chwili zawiera jediją ze swoich kilku składowych o różnych typach. Specyfikatory struktur i unii mają taką samą postać.
specyfikator-struktury-unii:
struktura-unia identyfikatoropc { lista-deklaracji-składowych } struktura-unia identyfikator
struktura-unia:
struct
union
Lista deklaracji struktury jest ciągiem deklaracji składowych struktury lub unii.
Chodzi o to, że rejestry urządzeń zewnętrznych zmieniają wartości na skutek zdarzeń zewnętrznych, w minimalnym stopniu kontrolowanych przez program, i w związku z tym wymykają się spod ogólnie stosowanych algorytmów optymalizacyjnych. - Przyp• tłum.
A8 DEKLARAC.JF I |
I powered by 1 |
lista-deklaracji-składowych: 1 |
| Mi sio! | |
deklaracja-składowych
lista-deklaracji-składowych deklaracja-składowych deklaracja-składowych:
lista-spec-kwal lista-deklaratorów-składowych ; lista-spec-kwal:
specyfikator-typu lista-spec-kwalopc kwalifikator-typu lista-spec-kwal^
lista-deklaratorów-składowych: deklarator-składowej
lista-deklaratorów-składowych , deklarator-składowej
Zazwyczaj deklarator-składowej jest po prostu deklaratorem elementu struktury lub unii. Składową struktury może też być grupa bitów o podanej długości. Taką składową nazywa się polem bitowym lub po prostu polem\ jej długość jest oddzielona od deklaratora nazwy pola dwukropkiem.
deklarator-składowej: deklarator
deklarator„pc : wyraienie-stałe Specyfikator typu o postaci:
struktura-unia identyfikator { lista-deklaracji-składowych }
deklaruje identyfikator jako etykietkę struktury lub unii, których budowę opisuje lista. Późniejsze deklaracje na tym samym poziomie lub w zagnieżdżonych blokach mogą odnosić się do tego samego typu przez podanie samej etykietki, bez całej listy deklaracji składowych:
struktura-unia identyfikator
Wystąpienie takiego specyfikatora bez listy, ale z etykietką, dla której brak deklaracji, oznacza typ niekompletny. Obiekty z niekompletnym typem struktury lub unii mogą wystąpić w kontekstach, w których ich rozmiar nie ma znaczenia, na przykład w deklaracjach (nie definicjach) przy określaniu wskaźnika lub tworzeniu typu (typedef), ale nigdzie indziej. Ten typ stanie się kompletny po późniejszym napotkaniu specyfikatora z tą samą etykietką, zawierającego listę deklaracji. Nawet w specyfikatorach z listą deklarowany typ struktury lub unii jest niekompletny wewnątrz listy - staje się on kompletny dopiero po napotkaniu klamry } zamykającej specyfikator.
Struktura nie może zawierać składowej o typie niekompletnym. Nie można zatem zadeklarować struktury lub unii zawierającej własne wcielenie. Poza nadaniem nazwy dla typu struktury lub unii, etykietki umożliwiają jednak definiowanie struktur odwo-
281