ANSI C 1

ANSI C 1



DODATEK A PRZEWODNIK JĘZYKA _______

6

Te zasady różnią się pod kilkoma względami od zasad opisanych w pierwszym wydaniu tego przewodnika. Poprzednio etykiety nie miały własnej przestrzeni nazw; etykietki struktur i unii, a w niektórych implementacjach również etykietki wyliczeń, należały do odrębnych przestrzeni nazw; włożenie różnego rodzaju etykietek do wspólnej przestrzeni jest nowym ograniczeniem. Najbardziej istotnym odejściem od reguł z pierwszego wydania jest zasada, żc każda struktura i unia tworzy oddzielną przestrzeń nazw dla swoich składowych, ta sama nazwa może więc wystąpić w kilku różnych strukturach. Tę zasadę powszechnie stosowano od wielu lat.

Leksykalny zasięg identyfikatora obiektu lub funkcji, występującego w deklaracji zewnętrznej, rozciąga się od końca jego deklaratora do końca jednostki tłumaczenia za-wierającej deklarację. Zasięg parametrów definicji funkcji rozpoczyna się z początkiem bloku definiującego tę funkcję i rozciąga na całą funkcję; zasięg parametru w deklaracji funkcji kończy się wraz z końcem deklaratora. Zasięg identyfikatora zadeklarowanego w nagłówku bloku rozciąga się od końca jego deklaratora do końca tego bloku. Zasięgiem etykiety jest cała zawierająca ją funkcja. Zasięg etykietki struktury, unii lub wyliczenia oraz stałej wyliczenia zaczyna się w miejscu jej wystąpienia w specyfikatorze typu i rozciąga na całą jednostkę tłumaczenia (dla deklaracji na poziomie zewnętrznym) lub do końca bloku (dla deklaracji wewnątrz funkcji).

Jawna deklaracja identyfikatora w nagłówku bloku, wliczając w to blok tworzący treść funkcji, zasłania aż do końca bloku wszystkie deklaracje tego samego identyfikatora podane na zewnątrz bloku.

A11.2 Łączność nazw

Wszystkie deklaracje tego samego identyfikatora dla obiektu lub funkcji o łączności wewnętrznej odnoszą się do tej samej rzeczy w całej jednostce tłumaczenia i ten obiekt (lub funkcja) jest unikalny dla całej jednostki tłumaczenia. Wszystkie deklaracje tego samego identyfikatora dla obiektu lub funkcji o łączności zewnętrznej odnoszą się do tej samej rzeczy i ten obiekt (lub funkcja) jest współużywalny w całym programie.

Zgodnie z p. A 10.2, gdy pierwsza zewnętrzna deklaracja identyfikatora zawiera spe-cyfikator Static, wówczas nadaje ona identyfikatorowi łączność wewnętrzną; w pozostałych przypadkach identyfikator ma łączność zewnętrzną. Jeśli deklaracja identyfikatora wewnątrz bloku nie zawiera specyfikatora extern, to ten identyfikator nie ma łączności i jest unikalny w funkcji. Gdy ta deklaracja zawiera extern i gdy w zasięgu otaczającym blok obowiązuje zewnętrzna deklaracja tego samego identyfikatora, wówczas ten identyfikator ma taką samą łączność, jak w deklaracji zewnętrznej i odnosi się do tego samego obiektu lub funkcji. Jeśli jednak w zasięgu widoczności nie ma żadnej deklaracji zewnętrznej, to łączność tego identyfikatora jest zewnętrzna.

Preprocesor


Preprocesor umożliwia makrogenerację, kompilację warunkową oraz włączanie do programów zawartości wskazanych plików. Wiersze programu rozpoczynające się znakiem # (ewentualnie poprzedzonym odstępami) służą do komunikacji z preprocesorem. Składnia tych wierszy jest niezależna od reszty języka; mogą one wystąpić gdziekolwiek w programie, a ich działanie kończy się (niezależnie od zasad dostępności) wraz z końcem jednostki tłumaczenia. Granice wierszy są istotne - każdy wiersz jest rozpatrywany indywidualnie (ale w p. A12.2 opisano, jak można taki wiersz przedłużyć). Leksemami dla preprocesora są wszystkie leksemy języka lub ciągi znaków tworzące nazwy plików, jak w wierszu #include (p. A12.4). Ponadto każdy znak, którego nie zdefiniowano inaczej, jest traktowany jako leksem, ale w wierszach preprocesora znaczenie białych znaków innych niż odstęp i tabulacja pozioma nie jest określone.

Przebieg preprocesora odbywa się w kilku logicznie po sobie następujących fazach, które w konkretnych implementacjach mogą być połączone:

1.    Trzyznakowe sekwencje opisane w p. A12.1 są jako pierwsze zastępowane przez ich odpowiedniki. Jeśli środowisko systemu operacyjnego tego wymaga, to pomiędzy wiersze programu wstawia się znaki nowego wiersza.

2.    Wszystkie wystąpienia kombinacji znaku \ i nowego wiersza są usuwane, co prowadzi do sklejenia wierszy (p. A 12.2).

3.    Program jest przekształcany na ciąg leksemów rozdzielonych odstępami; komentarze zastępuje się pojedynczym odstępem. Następnie wykonuje się instrukcje preprocesora i dokonuje makrorozwinięć (p. A12.3-A12.10).

4.    Sekwencje specjalne w stałych znakowych i napisach (p. A2.5.2, A2.6) zastępuje się ich odpowiednikami; następnie skleja się sąsiadujące ze sobą napisy.

5.    Wynik jest tłumaczony, a następnie łączony z innymi programami i bibliotekami, by skompletować niezbędne podprogramy i dane oraz by odniesienia do zewnętrznych funkcji i obiektów powiązać z ich definicjami.

A12.1 Sekwencje trzyznakowe

Zbiór znaków stosowanych w programach źródłowych w języku C zawiera się w 7-bi-towym zbiorze ASCII, ale jest nadzbiorem zbioru ISO 646-1983 Invariant Codę Set. Aby umożliwić napisanie programów w tym ograniczonym zbiorze znaków, wszystkie wystąpienia następujących trzyznakowych sekwencji zastępuje się odpowiednimi pojedynczymi znakami. Odbywa się to przed jakimkolwiek innym przetwarzaniem tekstu programu.

20 - Język ANSI C 305


Wyszukiwarka

Podobne podstrony:
ANSI C 1 DODATEK A PRZEWODNIK JĘZYKA C Implementacje różnią się reakcjami na dzielenie przez zero
ANSI C 1 DODATEK A PRZEWODNIK JĘZYKA C union { struct { int type; ł n; struct { int type
ANSI C 3 DODATEK A PRZEWODNIK JĘZYKA C_________ Mechanizm makrodefinicji przydaje się do definiowa
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 9 DODATEK A PRZEWODNIK JĘZYKA C_______—- Gdy wartość całkowita jest przekształcana do typu
ANSI C 0 DODATEK A PRZEWODNIK JĘZYKA C_________ Obiekt typu całkowitego można jawnie przekształcić
ANSI C 2 DODATEK A PRZEWODNIK JĘZYKA C W pierwszym wydaniu książki typ wyrażenia przyrostkowego by
ANSI C 4 DODATEK A PRZEWODNIK JĘZYKA C_______ wynikiem jest 1; jeśli odnosi się do tablicy, to wyn
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 0 DODATEK A PRZEWODNIK JĘZYKA C ___——- łujących się do samych siebie: struktura lub unia mo
ANSI C 2 DODATEK A PRZEWODNIK JĘZYKA CA8.6 Znaczenie deklaratorów Lista deklaratorów pojawia się p
ANSI C 3 DODATEK A PRZEWODNIK JĘZYKA C____- tablicą o pięciu elementach, z których każdy jest tabl

więcej podobnych podstron