DODATEK A PRZEWODNIK JĘZYKA ______
o nieokreślonej liczbie elementów całkowitych”, „funkcja o nieokreślonych parametrach zwracająca wskaźnik do obiektów całkowitych” oraz „tablica o nieokreślonej liczbie elementów, którymi są wskaźniki do bezparametrowych funkcji o wartościach całkowitych”.
Deklaracje, w których specyfikatorem klasy pamięci jest typedef, nie deklarują obiektów, natomiast definiują identyfikatory jako nazwy typów. O takich identyfikatorach mówimi, że są nazwami typedef.
nazwa-typedef:
identyfikator
Deklaracja typedef określa w zwykły sposób (patrz p. A8.6) właściwości typu dla każdej nazwy występującej wśród jej deklaratorów. Po zadeklarowaniu każda nazwa typedef jest składniowo równoważna ze słowem kluczowym specyfikatora typu dla związanego z nią typu.
Na przykład po deklaracjach
typedef long Blockno, *Blockptr; typedef struct { double r, theta; } Complex;
wszystkie konstrukcje
Blockno b; extern Blockptr bp;
Complex z, *zp;
są poprawnymi deklaracjami. Typem zmiennej b jest long, typem bp jest „wskaźnik do long”, typem z jest wskazana struktura, a typem zp jest wskaźnik do takiej struktury.
Deklaracje typedef nie wprowadzają nowych typów, tylko synonimy dla typów, które mogłyby być określone w inny sposób. Zatem w powyższym przykładzie b ma taki sam typ, jak inne obiekty typu long.
Nazwy typedef mogą być ponownie zadeklarowane w węższym zasięgu pod warunkiem, że zbiór specyfikatorów typu nie jest pusty. Na przykład
extern Blockno;
nie deklaruje ponownie Blockno, ale extern int Blockno; tak.
A9 INSTRUKCJE _
Dwie listy specyfikatorów typu są równoważne, jeśli zawierają ten sam zestaw specy-fikatorów typu, wliczając w to te specyfikatory, które wynikają z innych (np. samotne long implikuje long int). Struktury, unie i wyliczenia z różnymi etykietkami są różne; także struktury, unie i wyliczenia bez etykietek wprowadzają typy unikalne.
Dwa typy są takie same, jeśli ich deklaratory abstrakcyjne (p. A8.8), ewentualnie po rozwinięciu typów typedef i usunięciu nazw parametrów funkcji, są takie same aż po równoważność list specyfikatorów typu. Rozmiary tablic i typy parametrów funkcji są tu znaczące.
Jeśli nie powiedziano inaczej, instrukcje są wykonywane sekwencyjnie. Instrukcje wykonuje się w celu osiągnięcia pewnych efektów; instrukcje nie mają wartości. Rozróżnia się kilka grup instrukcji.
instrukcja:
instrukcja-etykietowana instrukcja-wyrażeniowa instrukcja-złoiona instrukcja-wyboru instrukcja-powtarzania instrukcja-skoku
Instrukcje mogą być poprzedzone przedrostkami etykietowymi.
instrukcja-etykietowana:
identyfikator : instrukcja case wyrażenie-stałe : instrukcja default: instrukcja
Etykieta składająca się z identyfikatora deklaruje ten identyfikator. Jedynym sposobem skorzystania z takiego identyfikatora jest użycie go w instrukcji goto. Zasięgiem tego identyfikatora jest bieżąca funkcja. Etykiety tworzą oddzielną przestrzeń nazw, nie wchodzą więc w konflikt z innymi identyfikatorami, a także nie można ich ponownie zadeklarować. Patrz p. Al 1.1.
295