Dane szczegółowe książki
Język ANSI C / Kernighan, Brian W.; Ritchie, Dennis M. (1941-); Kruszewska, Danuta; Kruszewski, Marek
Autorzy
Tytuł
Język ANSI C
Tytuł oryginału
The C programming language
Wydawnictwo
Warszawa: Wydawnictwa Naukowo-Techniczne, 1997
Numer wydania
2
ISBN
8320421527
Hasła przedmiotowe
Spis treści
pokaż spis treści
'RZEDMOWA 11
'RZEDMOWA DO PIERWSZEGO WYDANIA KSIĄŹKI 13
OD TŁUMACZY 15
WPROWADZENIE 17
ELEMENTARZ 23
Zaczynamy ....................................................,.
Zmienne i wyraźenia arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , . . ,
Instrukcja for....................................................
Stałe symboliczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Wejście i wyjście znakowe . . . . . . . . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . .
Kopiowanie plików ........................,.......................
Zliczanie znaków ,..................................,.............
Zliczanie wierszy . , . . , . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zliczanie słów . , . . , . . . . . . . . . . . . . . . . , . . , . . . . . . . . . . . . . . . . . . . . . . . . . .
Tablice ........................................................
Funkcje.......................,................................
Ar~aumenty - przekazywanie przez wartość . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tablice znakowe..................................................
Zmienne zewnętrzne i zasięg zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TYPY, OPERATORY I WYRAŹENIA
23
27
33
34
3S
36
39
40
42
44
47
S1
52
SS
60
Nazwy zmiennych .................................................
TYPY i rozmiary danych . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stałe ........................................,.....,...........
Deklaracje......................................................
Operatory arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Relacje i operatory logiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Przekształcenia typów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operatory zwiększania i zmniejszania . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
61
62
66
67
68
69
74
5
SPIS TREŚCI
2,9 Operatory bitowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10 Operatory i wyrażenia przypisania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11 Wyrażenia warunkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12 Priorytety i kolejność obliczeń . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . .
3 STEROWANIE
3.1 Instrukcje i bloki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
3.2 lnswkcja if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Konstrukcja else-if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Instrukcja switCh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 . Pętle while i for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 Pętla do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7 Instrukcje break i continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8 Instrukcja goto i etykiety . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 FUNKCJE I STRUKTURA PROGRAMU
4.1 Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Funkcje zwracające wartości niecałkowite . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Zmienne zewnętrzne ..........................................
4.4 Zasięg nazw ................................................
4.5 Pliki nagłówkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 Zmienne statyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7 Zmienne rejestrowe . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.8 Struktura blokowa . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.9 Inicjowanie .................................................
4.10 Rekurencja.................................................
4.1 I Preprocesor języka C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.111 Wstawianie plików . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11.2 Makrorozwinięcie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11.3 Kompilacja warunkowa . . . . , . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . .
5 WSKAŹNIKI I TABLICE
5.1 Wskaźniki i adresy
5.2 Wskaźniki i argumenty funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Wskaźniki i tablice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.4 Arytmetyka na adresach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5 Wskaźniki znakowe i funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6 Tablice wskaźników; wskaźniki do wskaźników . . . . . . . . . . . . . . . . . . . . . .
5.7 Tablice wielowymiarowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8 Inicjowanie tablic wskaźników . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
5.9 Wskaźniki a tablice wielowymiarowe .. . .. . . .. . . .. .. . . ... ... . .. . .
5.10 Argumenty wywołania programu . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .
5.11 Wskaźniki do funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12 Skomplikowane deklaracje . .
6
PIS TREŚCI
STRUKTURY 173
1 Podstawowe wiadomości o strukturach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
2 Struktury i funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
3 Tablice struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
4 Wskaźniki do struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
5 Struktury odwołuj~ce się do samych siebie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
6 Przeglądanie tablic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
7 Deklaracja typedef ................................ ............... 196
.8 Unie........................................... ............... 198
.9 Pola bitowe ....................................... ............... 200
' WEJŚCIE I WYJŚCIE 203
.l Standardowe wejście i wyjście . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
.2 Formatowane wyjście - funkcja printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
.3 Zmienna długość list argumentów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
.4 Formatowane wejście - funkcja sCanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
.5 Obsługa plików ..................................... .............. 214
.6 Obsługa błędów - plik stderr i funkcja exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
.7 Wprowadzanie i wyprowadzanie wierszy tekstu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
.8 Kilka użytecznych funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
.8.1 Operacje na tekstach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
.8.2 Badanie klasy znaków i ich przekształcenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
.8.3 Funkcja ungetc .................................... .............. 222
.8.4 Wykonanie polecenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
.8.5 Zarz~dzanie pamięcią . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
.8.6 Funkcje matematyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
.8.7 Generowanie liczb losowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
ŚRODOWISKO SYSTEMU UNIX 225
Deskryptory plików . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Wejście i wyjście niskiego poziomu - funkcje read i write . . . . . . . . . . . . . . . . . . . 226
Funkcje open, creat, close, unlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Dostęp swobodny - funkcja Iseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Przykład - realizacja funkcji fopen i gete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Przykład - wypisywanie zawartości skorowidzów . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Przykład - dystrybutor pamięci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
)ODATEK A: PRZEWODNIK JĘZYKA C 251
,1 Wstęp ................................... ...................... 251
.2 Konwencje leksykalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
,2.1 Jednostki leksykalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
,2.2 Komentarze............................... ...................... 252
,2.3 Identyfikatory (nazwy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
7
SPIS TREŚCI
A2.4 Słowa kluczowe..................................................
A2.5 Stałe..........................................................
A2.5.1 Stałe całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A2.5.2 Stałe znakowe ....................................................
A2.5.3 Stałe zmiennopozycyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A2.5.4 Stałe wyliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A2.6 Napisy .........................................................
A3 Notacja opisu składni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A4 Znaczenie identyfikatorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A4.1 Klasy pamięci....................................................
A4.2 TYPY Podstawowe.................................................
A4.3 TYpY pochodne ...................................................
A4.4 Kwalifikatory typów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A5 Obiekty i 1-wartości . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6 Przekształcenia typów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.1 Promocja typu całkowitego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.2 Przekształcenia całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.3 Wartości całkowite i zmiennopozycyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.4 TYPY zmiennopozycyjne ............................................
A6.5 Przekształcenia arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.6 Wskaźniki i wartości całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.7 Typ void .......................................................
A6.8 Wskaźniki do typu void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7 Wyrażenia......................................................
A7.1 Generowanie wskaźników . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.2 Wyrażenia proste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.3 Wyrażenia przyrostkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.3.1 Odwołania do tablic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.3.2 Wywołania funkcji .. . . .. .. . . . . . .. .. . .. . . . . .. . . .. . . . . .. ... . . .. . . . . .
A7.3.3 Odwołania do struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.3.4 Zwiększanie i zmniejszanie przyrostkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4 Operatory jednoar;umentowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.1 Przedrostkowe operatory zwiększania i zmniejszania . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.2 Operator adresu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.3 Operator adresowania pośredniego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.4 Jednoargumentowy plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.5 Jednoarbumentowy minus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.6 Operator dopełnienia jedynkoweao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.7 Operator negacji logicznej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.8 Operator sizeoł . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.5 Rzutowanie................:....................................
A7.6 Operatory multyplikatywne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.7 Operatory addytywne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.8 Operatory przesunięcia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.9 Operatory relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.10 Operatory przyrównania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.1I Bitowy operator koniunkcji (AND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.12 Bitowy operator różnicy symetrycznej (XOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.13 Bitowy operator alternatywy (OR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.14 Operator iloczynu logicznego (logiczne AND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ó
il'IS TREŚCI
ł7.15 Operator sumy logicznej (logiczne OR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
X7.16 Operator warunkowy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
X7.17 Wyrażenia przypisania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
X7.18 Operator przecinkowy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
A7.19 Wyrażenia stałe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
48 Deklaracje ..................................... ................. 277
4$.1 Specyfikatory klasy pamięci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
48.2 Specyfikatory tYPu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
A8.3 Deklaracje struktur i unii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
A8.4 Wyliczenia ..................................... ................. 284
A8.5 Deklaratory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
A8.6 Znaczenie deklaratorów . . . . .. . .. . . ... . .. . . . . . . .. . . .. ... . . . . .. . . . . . . 286
A8.6.1 Deklaratory wskaźników . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
A8.6.2 Deklaratory tablic . . .. ... . . . . . . . .. . . . . . . . . . .. . . .. . . . . .. . .. . .. . . . . . . 287
A8.G.3 Deklaratory funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
A8.7 Inicjowanie................... ............... ................. 290
A8.8 Nazwy typów ................................... ................. 293
A8.9 Nazwytypedef.................................. ................. 294
A8.10 Równoważność typów ............................. ................. 295
A9 Instrukcje...................................... ................. 295
A9.1 Instrukcje etykietowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
A9.2 Instrukcja wyrażeniowa . .. . . . .. . . . . . . . . . . .. . .. . . .. . . . . .. . .. . .. . . . .. . 296
A9.3 Instrukcja złożona (blok) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
A9.4 Instrukcje wyboru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
A9.5 Instrukcje powtarzania (pętle) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
A9.6 Instn~kcje skoku .. . .. . . . . . . . . . . . . . . . . . . .. . .. . . .. . .. . .. . .. . .. . . . .. . 299
AJO Deklaracje zewnętrzne . .. . . .. . . . . .. . . . . .. . . . .. . . . . . . . ... . . . . . . . .. . . . 299
A10.1 Definicje funkcji . . . . . . . . . . . . . . . .. . . . . . . .. . .. . . . . . . . . .. . . . . . . . . . . . . 300
A10.2 Deklaracje zewnętrzne . .. . . . . . . . . .. . . . . . . . . . .. . . . . . . . ... . . . . . . . . . . .. 302
All Zasięg i ł~czność nazw ... . . . .. . . . . . . . . . . .. . . . . . .. . . . . .. . .. . . . . . . . . . 303
AII.I Zasięg leksykalny . .. . . . . . .. . . . . .. . . . . . . . . . .. . .. . . . . .. . .. . .. . . .. . .. 303
A~1.2 Ł2czność nazw ........... ..................... ................. 304
A l2 Preprocesor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
A12.1 Sekwencje trzyznakowe . .. .. . .. . . . . . . . .. . .. . .. . . . . . . . . .. . .. . .. . . . .. . 305
A12.2 Sklejanie wierszy . .. . . . . . .. . .. . .. . . . . .. . . . .. . .. . . . . ... .. . .. . . .. . .. 306
A12.3 Definicje i rozwinięcia makr . . . . . . . . . . . .. . .. . .. . . .. . . . . .. . .. . . . . . . . . . 306
A12.4 Włyczanie plików . . . . .. . . . . . .. . .. . . . . . . . . . .. . . . . . . . . . . . . . .. . . . . . .. 309
A12.5 Kompilacja warunkowa ... ... ... . ..... ... .......... .. ... ......... ... 309
A 12.6 Numeracja wierszy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1
A12.7 Generowanie błędów .............................. ................. 31l
A 12.8 Instrukcja pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1
A12.9 Pusta instrukcja preprocesora . . . . . . . . . . . . . . .. . .. . . . . . . . . .. . . . . . . . . . . . . 312
A12.10 Nazwy zdefiniowane w preprocesorze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
A13 Gramatyka..................................... ................. 312
DODATEK B: BIBLIOTEKA STANDARDOWA 321
BI Wejście i wyjście: naółówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
B I .l Operacje na plikach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
9
SPIS TREŚCI
B l.2 Formatowane wyjście . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B l.3 Formatowane wejście . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B1.4 Funkcje realizujące wejście i wyjście znakowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B1.5 Funkcje realizuj~ce bezpośrednie wejście i wyjście . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B1.6 Funkcje wyznaczające pozycję w pliku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B1.7 Obsługa błędów .................................................. 3
B2 Klasyfikowanie znaków: nagłówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B3 Operacje na tekstach: nagłówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B4 Funkcje matematyczne: nagłówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
BS Funkcje narzędziowe: nagłówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B6 Diagnostyka: naółówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B7 Zmienne listy argumentów: nagłówek . . . . . . . . . . . . . . . . . . . . . . . . . . 3
BS Skoki odległe: nagłówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B9 Sybnały: naółówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B10 Obsługa daty i czasu: nagłówek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Bl I Obraniczenia implementacji: nagłówki i . . . . . . . . . . . . . . . . . . 3
DODATEK C: PODSUMOWANIE ZMIAN 3~
SKOROWIDZ 3~
'RZEDMOWA DO PIERWSZEGO WYDANIA KSIĄŹKI 13
OD TŁUMACZY 15
WPROWADZENIE 17
ELEMENTARZ 23
Zaczynamy ....................................................,.
Zmienne i wyraźenia arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . , . . ,
Instrukcja for....................................................
Stałe symboliczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Wejście i wyjście znakowe . . . . . . . . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . .
Kopiowanie plików ........................,.......................
Zliczanie znaków ,..................................,.............
Zliczanie wierszy . , . . , . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zliczanie słów . , . . , . . . . . . . . . . . . . . . . , . . , . . . . . . . . . . . . . . . . . . . . . . . . . .
Tablice ........................................................
Funkcje.......................,................................
Ar~aumenty - przekazywanie przez wartość . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Tablice znakowe..................................................
Zmienne zewnętrzne i zasięg zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
TYPY, OPERATORY I WYRAŹENIA
23
27
33
34
3S
36
39
40
42
44
47
S1
52
SS
60
Nazwy zmiennych .................................................
TYPY i rozmiary danych . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stałe ........................................,.....,...........
Deklaracje......................................................
Operatory arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Relacje i operatory logiczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Przekształcenia typów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Operatory zwiększania i zmniejszania . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
61
62
66
67
68
69
74
5
SPIS TREŚCI
2,9 Operatory bitowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.10 Operatory i wyrażenia przypisania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.11 Wyrażenia warunkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.12 Priorytety i kolejność obliczeń . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . . . .
3 STEROWANIE
3.1 Instrukcje i bloki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
3.2 lnswkcja if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Konstrukcja else-if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Instrukcja switCh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 . Pętle while i for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 Pętla do-while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.7 Instrukcje break i continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.8 Instrukcja goto i etykiety . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 FUNKCJE I STRUKTURA PROGRAMU
4.1 Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 Funkcje zwracające wartości niecałkowite . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 Zmienne zewnętrzne ..........................................
4.4 Zasięg nazw ................................................
4.5 Pliki nagłówkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 Zmienne statyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7 Zmienne rejestrowe . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.8 Struktura blokowa . . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.9 Inicjowanie .................................................
4.10 Rekurencja.................................................
4.1 I Preprocesor języka C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.111 Wstawianie plików . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11.2 Makrorozwinięcie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.11.3 Kompilacja warunkowa . . . . , . . . . . . . . . . . . . . . . . . . , . . . . . . . . . . . . .
5 WSKAŹNIKI I TABLICE
5.1 Wskaźniki i adresy
5.2 Wskaźniki i argumenty funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 Wskaźniki i tablice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ..
5.4 Arytmetyka na adresach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.5 Wskaźniki znakowe i funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6 Tablice wskaźników; wskaźniki do wskaźników . . . . . . . . . . . . . . . . . . . . . .
5.7 Tablice wielowymiarowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8 Inicjowanie tablic wskaźników . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ,
5.9 Wskaźniki a tablice wielowymiarowe .. . .. . . .. . . .. .. . . ... ... . .. . .
5.10 Argumenty wywołania programu . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . .
5.11 Wskaźniki do funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12 Skomplikowane deklaracje . .
6
PIS TREŚCI
STRUKTURY 173
1 Podstawowe wiadomości o strukturach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
2 Struktury i funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
3 Tablice struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
4 Wskaźniki do struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
5 Struktury odwołuj~ce się do samych siebie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
6 Przeglądanie tablic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
7 Deklaracja typedef ................................ ............... 196
.8 Unie........................................... ............... 198
.9 Pola bitowe ....................................... ............... 200
' WEJŚCIE I WYJŚCIE 203
.l Standardowe wejście i wyjście . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
.2 Formatowane wyjście - funkcja printf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
.3 Zmienna długość list argumentów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
.4 Formatowane wejście - funkcja sCanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
.5 Obsługa plików ..................................... .............. 214
.6 Obsługa błędów - plik stderr i funkcja exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
.7 Wprowadzanie i wyprowadzanie wierszy tekstu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
.8 Kilka użytecznych funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
.8.1 Operacje na tekstach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
.8.2 Badanie klasy znaków i ich przekształcenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
.8.3 Funkcja ungetc .................................... .............. 222
.8.4 Wykonanie polecenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
.8.5 Zarz~dzanie pamięcią . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
.8.6 Funkcje matematyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
.8.7 Generowanie liczb losowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
ŚRODOWISKO SYSTEMU UNIX 225
Deskryptory plików . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Wejście i wyjście niskiego poziomu - funkcje read i write . . . . . . . . . . . . . . . . . . . 226
Funkcje open, creat, close, unlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Dostęp swobodny - funkcja Iseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Przykład - realizacja funkcji fopen i gete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Przykład - wypisywanie zawartości skorowidzów . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Przykład - dystrybutor pamięci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
)ODATEK A: PRZEWODNIK JĘZYKA C 251
,1 Wstęp ................................... ...................... 251
.2 Konwencje leksykalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
,2.1 Jednostki leksykalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
,2.2 Komentarze............................... ...................... 252
,2.3 Identyfikatory (nazwy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
7
SPIS TREŚCI
A2.4 Słowa kluczowe..................................................
A2.5 Stałe..........................................................
A2.5.1 Stałe całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A2.5.2 Stałe znakowe ....................................................
A2.5.3 Stałe zmiennopozycyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A2.5.4 Stałe wyliczeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A2.6 Napisy .........................................................
A3 Notacja opisu składni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A4 Znaczenie identyfikatorów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A4.1 Klasy pamięci....................................................
A4.2 TYPY Podstawowe.................................................
A4.3 TYpY pochodne ...................................................
A4.4 Kwalifikatory typów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A5 Obiekty i 1-wartości . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6 Przekształcenia typów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.1 Promocja typu całkowitego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.2 Przekształcenia całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.3 Wartości całkowite i zmiennopozycyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.4 TYPY zmiennopozycyjne ............................................
A6.5 Przekształcenia arytmetyczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.6 Wskaźniki i wartości całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A6.7 Typ void .......................................................
A6.8 Wskaźniki do typu void . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7 Wyrażenia......................................................
A7.1 Generowanie wskaźników . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.2 Wyrażenia proste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.3 Wyrażenia przyrostkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.3.1 Odwołania do tablic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.3.2 Wywołania funkcji .. . . .. .. . . . . . .. .. . .. . . . . .. . . .. . . . . .. ... . . .. . . . . .
A7.3.3 Odwołania do struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.3.4 Zwiększanie i zmniejszanie przyrostkowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4 Operatory jednoar;umentowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.1 Przedrostkowe operatory zwiększania i zmniejszania . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.2 Operator adresu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.3 Operator adresowania pośredniego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.4 Jednoargumentowy plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.5 Jednoarbumentowy minus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.6 Operator dopełnienia jedynkoweao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.7 Operator negacji logicznej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.4.8 Operator sizeoł . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.5 Rzutowanie................:....................................
A7.6 Operatory multyplikatywne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.7 Operatory addytywne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.8 Operatory przesunięcia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.9 Operatory relacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.10 Operatory przyrównania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.1I Bitowy operator koniunkcji (AND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.12 Bitowy operator różnicy symetrycznej (XOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.13 Bitowy operator alternatywy (OR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A7.14 Operator iloczynu logicznego (logiczne AND) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ó
il'IS TREŚCI
ł7.15 Operator sumy logicznej (logiczne OR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
X7.16 Operator warunkowy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
X7.17 Wyrażenia przypisania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
X7.18 Operator przecinkowy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
A7.19 Wyrażenia stałe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
48 Deklaracje ..................................... ................. 277
4$.1 Specyfikatory klasy pamięci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
48.2 Specyfikatory tYPu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
A8.3 Deklaracje struktur i unii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
A8.4 Wyliczenia ..................................... ................. 284
A8.5 Deklaratory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
A8.6 Znaczenie deklaratorów . . . . .. . .. . . ... . .. . . . . . . .. . . .. ... . . . . .. . . . . . . 286
A8.6.1 Deklaratory wskaźników . . . . . . . . . . . . . , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
A8.6.2 Deklaratory tablic . . .. ... . . . . . . . .. . . . . . . . . . .. . . .. . . . . .. . .. . .. . . . . . . 287
A8.G.3 Deklaratory funkcji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
A8.7 Inicjowanie................... ............... ................. 290
A8.8 Nazwy typów ................................... ................. 293
A8.9 Nazwytypedef.................................. ................. 294
A8.10 Równoważność typów ............................. ................. 295
A9 Instrukcje...................................... ................. 295
A9.1 Instrukcje etykietowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
A9.2 Instrukcja wyrażeniowa . .. . . . .. . . . . . . . . . . .. . .. . . .. . . . . .. . .. . .. . . . .. . 296
A9.3 Instrukcja złożona (blok) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
A9.4 Instrukcje wyboru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
A9.5 Instrukcje powtarzania (pętle) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
A9.6 Instn~kcje skoku .. . .. . . . . . . . . . . . . . . . . . . .. . .. . . .. . .. . .. . .. . .. . . . .. . 299
AJO Deklaracje zewnętrzne . .. . . .. . . . . .. . . . . .. . . . .. . . . . . . . ... . . . . . . . .. . . . 299
A10.1 Definicje funkcji . . . . . . . . . . . . . . . .. . . . . . . .. . .. . . . . . . . . .. . . . . . . . . . . . . 300
A10.2 Deklaracje zewnętrzne . .. . . . . . . . . .. . . . . . . . . . .. . . . . . . . ... . . . . . . . . . . .. 302
All Zasięg i ł~czność nazw ... . . . .. . . . . . . . . . . .. . . . . . .. . . . . .. . .. . . . . . . . . . 303
AII.I Zasięg leksykalny . .. . . . . . .. . . . . .. . . . . . . . . . .. . .. . . . . .. . .. . .. . . .. . .. 303
A~1.2 Ł2czność nazw ........... ..................... ................. 304
A l2 Preprocesor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
A12.1 Sekwencje trzyznakowe . .. .. . .. . . . . . . . .. . .. . .. . . . . . . . . .. . .. . .. . . . .. . 305
A12.2 Sklejanie wierszy . .. . . . . . .. . .. . .. . . . . .. . . . .. . .. . . . . ... .. . .. . . .. . .. 306
A12.3 Definicje i rozwinięcia makr . . . . . . . . . . . .. . .. . .. . . .. . . . . .. . .. . . . . . . . . . 306
A12.4 Włyczanie plików . . . . .. . . . . . .. . .. . . . . . . . . . .. . . . . . . . . . . . . . .. . . . . . .. 309
A12.5 Kompilacja warunkowa ... ... ... . ..... ... .......... .. ... ......... ... 309
A 12.6 Numeracja wierszy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1
A12.7 Generowanie błędów .............................. ................. 31l
A 12.8 Instrukcja pragma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 1
A12.9 Pusta instrukcja preprocesora . . . . . . . . . . . . . . .. . .. . . . . . . . . .. . . . . . . . . . . . . 312
A12.10 Nazwy zdefiniowane w preprocesorze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
A13 Gramatyka..................................... ................. 312
DODATEK B: BIBLIOTEKA STANDARDOWA 321
BI Wejście i wyjście: naółówek
B I .l Operacje na plikach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
9
SPIS TREŚCI
B l.2 Formatowane wyjście . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B l.3 Formatowane wejście . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B1.4 Funkcje realizujące wejście i wyjście znakowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B1.5 Funkcje realizuj~ce bezpośrednie wejście i wyjście . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B1.6 Funkcje wyznaczające pozycję w pliku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
B1.7 Obsługa błędów .................................................. 3
B2 Klasyfikowanie znaków: nagłówek
B3 Operacje na tekstach: nagłówek
B4 Funkcje matematyczne: nagłówek
BS Funkcje narzędziowe: nagłówek
B6 Diagnostyka: naółówek
B7 Zmienne listy argumentów: nagłówek
BS Skoki odległe: nagłówek
B9 Sybnały: naółówek
B10 Obsługa daty i czasu: nagłówek
Bl I Obraniczenia implementacji: nagłówki
DODATEK C: PODSUMOWANIE ZMIAN 3~
SKOROWIDZ 3~