ANSI C 0

ANSI C 0



DODATEK A PRZEWODNIK JĘZYKA C ___——-

łujących się do samych siebie: struktura lub unia może zawierać wskaźnik do swojego wcielenia, można bowiem deklarować wskaźniki do typów niekompletnych.

Bardzo specjalna reguła odnosi się do deklaracji mającej postać:

struktura-unia identyfikator ;

która deklaruje strukturę lub unię, ale nie zawiera listy deklaracji i deklaratorów. Taka deklaracja w danym zasięgu tworzy z identyfikatora etykietkę nowej struktury lub unii (o typie niekompletnym), nawet jeśli ten identyfikator był już w szerszym zasięgu zadeklarowany jako etykietka struktury lub unii (p. Al 1.1).

Ta dziwna reguła jest w ANSI C całkiem nowa. Ma ona umożliwić deklarowanie w wewnętrznym zasięgu wzajemnie odwołujących się do siebie struktur, których etykietki mogły być już zadeklarowane w szerszym zasięgu.

Specyfikator struktury lub unii z listą, ale bez etykietki, tworzy typ unikalny; można się do niego bezpośrednio odwołać tylko w deklaracji, której jest częścią.

Nazwy składowych i etykietek nie kolidują ze sobą, a także z innymi zwykłymi zmiennymi. Ta sama nazwa składowej nie może wystąpić dwa razy w tej samej strukturze lub unii, ale może być użyta w innych strukturach i uniach.

W pierwszym wydaniu tej książki nazwy składowych struktur i unii nie były związane z miejscem ich pochodzenia. Jednak to powiązanie było powszechnie stosowane w kompilatorach na długo przed powstaniem ANSI C.

Składowa struktury lub unii, ale nie pole bitowe, może być obiektem dowolnego typu. Pole (które nie musi mieć deklaratora, może więc nie mieć nazwy) ma typ int, unsigned int lub signed int i jest traktowane jak obiekt całkowity o długości wskazanej w bitach; od implementacji zależy, czy pola typu int są traktowane jak obiekty ze znakiem. Przylegające do siebie pola bitowe struktury pakuje się w zależne od implementacji porcje pamięci w sposób zależny od implementacji. Jeśli kolejne pole już się nie mieści w częściowo wypełnionej porcji pamięci, to może być rozdzielone między porcje lub przeniesione do następnej porcji. Pole bez nazwy o rozmiarze 0 wymusza takie przeniesienie, zatem następne pole zostanie umieszczone na granicy następnej porcji.

Standard ANSI jeszcze bardziej uzależnia pola bitowe od implementacji, niż reguły podane w pierwszym wydaniu książki. Rozsądnie jest przyjąć zasady językowe dotyczące rozmieszczania pól bitowych jako bezwarunkowo „zależne od implementacji”. Struktury z polami bitowymi mogą być stosowane jako przenośny sposób na zmniejszenie rozmiaru pamięci wymaganej dla struktury (prawdopodobnie kosztem zwiększenia rozmiaru kodu i czasu potrzebnego na obsługę pól) lub jako nieprzenośny sposób na opisanie położenia w pamięci na poziomie bitów. W drugim przypadku wymaga się znajomości zasad obowiązujących w danej implementacji.

A8 DEKLARACJE


Adresy składowych struktury wzrastają zgodnie z kolejnością deklara<_ _ wych. Składową struktury, ale nie pole, umieszcza się w pamięci zgodnie z wymaganiami jej typu; zatem w strukturze mogą wystąpić dziury bez nazwy. Jeśli wskaźnik do struktury jest zrzutowany na wskaźnik do typu jej pierwszej składowej, to wynikowy wskaźnik odnosi się do pierwszej składowej.

Unię można rozumieć jako strukturę, której wszystkie składowe są ulokowane z przesunięciem zerowym względem jej początku i której rozmiar jest dostatecznie duży, aby pomieścić każdą z jej składowych. Jeśli wskaźnik do unii jest zrzutowany do wskaźnika do typu jej pierwszej składowej, to wynikowy wskaźnik odnosi się do tej składowej.

prostym przykładem deklaracji struktury jest

struct tnode { char tword[20]; int count; struct tnode *left; struct tnode *right;

Struktura ta zawiera 20-znakową tablicę, wartość całkowitą oraz dwa wskaźniki do podobnych struktur. Przy takiej deklaracji wiersz

struct tnode s, *sp;

deklaruje S jako strukturę podanego rodzaju oraz sp jako wskaźnik do takiej struktury. Zatem wyrażenie

sp->count

odnosi się do składowej count w strukturze wskazywanej przez sp; wyrażenie s.left

odnosi się do wskaźnika do lewego poddrzewa struktury s, a wyrażenie s.right->tword[0]

reprezentuje pierwszy znak składowej tword w prawym poddrzewie S.

Zasadniczo nie można odwoływać się do wartości składowej unii, jeżeli ta wartość nie była wstawiona do unii za pomocą tej samej składowej. Następująca zasada ułatwia jednak korzystanie z unii: jeśli unia składa się z kilku struktur, w których występuje wspólny początkowy ciąg składowych, i w danej chwili unia zawiera jedną z tych struktur, to do początkowej wspólnej części można się odwołać za pomocą dowolnej z tych struktur. Na przykład taki fragment programu jest poprawny:

283


Wyszukiwarka

Podobne podstrony:
ANSI C 0 DODATEK A PRZEWODNIK JĘZYKA C_________ Obiekt typu całkowitego można jawnie przekształcić
ANSI C 0 DODATEK A PRZEWODNIK JĘZYKA C_______ int max(a, b, c) int a, b, c;{ /* .» *1} gdzie dekla
ANSI C 4 DODATEK A PRZEWODNIK JĘZYKA C_______ wynikiem jest 1; jeśli odnosi się do tablicy, to wyn
ANSI C 3 DODATEK A PRZEWODNIK JĘZYKA C_________ Mechanizm makrodefinicji przydaje się do definiowa
ANSI C 9 DODATEK A PRZEWODNIK JĘZYKA C_______—- Gdy wartość całkowita jest przekształcana do typu
ANSI C 1 DODATEK A PRZEWODNIK JĘZYKA C Implementacje różnią się reakcjami na dzielenie przez zero
ANSI C 2 DODATEK A PRZEWODNIK JĘZYKA C W pierwszym wydaniu książki typ wyrażenia przyrostkowego by
ANSI C 2 DODATEK A PRZEWODNIK JĘZYKA CA8.6 Znaczenie deklaratorów Lista deklaratorów pojawia się p
ANSI C 1 DODATEK A PRZEWODNIK JĘZYKA _______ 6 Te zasady różnią się pod kilkoma względami od zasad
ANSI C 5 DODATEK A PRZEWODNIK JĘZYKA C_________A2.1 Jednostki leksykalne Istnieje sześć klas jedno
ANSI C 6 DODATEK A PRZEWODNIK JĘZYKA C_____.____A2.5.2 Stałe znakowe Stała znakowa jest ciągiem zł
ANSI C 7 DODATEK A PRZEWODNIK JĘZYKA C------- czaj umieszczane w oddzielnych wierszach; w kilku pr
ANSI C 8 DODATEK A PRZEWODNIK JĘZYKA C_________ Wszystkie z typów zmiennopozycyjnych: pojedynczej
ANSI C 5 DODATEK A PRZEWODNIK JĘZYKA CA7.8 Operatory przesunięcia Operatory przesunięcia « i » są
ANSI C 6 DODATEK A PRZEWODNIK JĘZYKA C_____ Wynikiem tej operacji jest bitowa różnica symetryczna
ANSI C 7 DODATEK A PRZEWODNIK JĘZYKA C__________ rekurencyjnie, podskładowych nie może być kwalifi
ANSI C 8 DODATEK A PRZEWODNIK JĘZYKA
ANSI C 9 DODATEK A PRZEWODNIK JĘZYKA C________■ Kwalifikatory typu wskazują specjalne właściwości
ANSI C 1 DODATEK A PRZEWODNIK JĘZYKA C union { struct { int type; ł n; struct { int type

więcej podobnych podstron