W potrzasku jezyka C, fragmenty-ksiazek-heliona
[ Pobierz całość w formacie PDF ]
IDZ DO PRZYK£ADOW W potrzasku SPIS TRECI jêzyka C KATALOG KSI¥¯EK Autor: Andrew Koenig T³umaczenie: Przemys³aw Szeremiota ISBN: 83-7361-727-2 Tytu³ orygina³ Format: B5, stron: 152 KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK DODAJ DO KOSZYKA Ka¿dy, nawet najbardziej dowiadczony programista, pope³nia b³êdy podczas pracy. Niektóre z nich wynikaj¹ z popiechu, inne — z u¿ycia niew³aciwych konstrukcji, operatorów lub typów. Wiêkszoæ z nich mo¿na wykryæ i usun¹æ po kilku minutach uwa¿nej lektury kodu. Zdarzaj¹ siê jednak i takie b³êdy, których odnalezienie i skorygowanie zajmuje kilka dni. B³êdy te s¹ z regu³y ³atwe do unikniêcia, jeli zrozumie siê przyczyny ich powstawania. Ksi¹¿ka „W potrzasku C” zawiera omówienie najczêciej spotykanych b³êdów i przyczyn ich powstawania. Nie zawiera ogólników - jej atutem s¹ konkretne, zaczerpniête z praktyki, przyk³ady. Ka¿dy programista prêdzej czy póniej natknie siê na jeden z prezentowanych w ksi¹¿ce b³êdów i, dziêki zawartym w niej wiadomociom, bêdzie w stanie usun¹æ go i unikn¹æ w póniejszej pracy. • B³êdy leksykalne i sk³adniowe • Przepe³nienie zakresu • Problemy z konsolidacj¹ • W³aciwe stosowanie funkcji bibliotecznych • Makrodefinicje • Przenonoæ kodu Nie traæ czasu na usuwanie b³êdów — dowiedz siê co robiæ, ¿eby w ogóle nie wystêpowa³y. CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW CENNIK CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Spis treci . Wstp ...............................................................................................7 Wprowadzenie .................................................................................11 Rozdział 1. Pułapki leksykalne...........................................................................15 1.1. Porównanie a przypisanie......................................................................................... 16 1.2. & i | to nie to samo co && i ||................................................................................... 17 1.3. Zachłanno analizatora leksykalnego...................................................................... 18 1.4. Literały stałych całkowitych..................................................................................... 19 1.5. Ci(gi a znaki............................................................................................................. 20 Rozdział 2. Pułapki składniowe..........................................................................23 2.1. Deklaracje funkcji .................................................................................................... 23 2.2. Priorytety operatorów............................................................................................... 26 2.3. Uwaga na redniki!................................................................................................... 30 2.4. Instrukcja wyboru switch.......................................................................................... 32 2.5. Wywołania funkcji ................................................................................................... 33 2.6. Klauzula else w zagnie5d5onych instrukcjach if ...................................................... 34 Rozdział 3. Pułapki semantyczne.......................................................................37 3.1. Wska6niki i tablice................................................................................................... 37 3.2. Wska6niki nie s( tablicami....................................................................................... 42 3.3. Deklaracje tablic w roli parametrów......................................................................... 43 3.4. Niebezpieczne synekdochy....................................................................................... 45 3.5. Wska6niki puste a ci(gi niepuste.............................................................................. 46 3.6. Zliczanie a asymetryczne granice zakresów............................................................. 46 3.7. Kolejno obliczania w wyra5eniu........................................................................... 55 3.8. Operatory &&, || i !................................................................................................... 57 3.9. Przepełnienie zakresu liczby całkowitej................................................................... 58 3.10. Zwracanie wartoci przez funkcj: main ................................................................... 59 Rozdział 4. Konsolidacja....................................................................................63 4.1. Czym jest konsolidator? ........................................................................................... 63 4.2. Deklaracje a definicje............................................................................................... 65 4.3. Kolizje nazw i słowo static....................................................................................... 66 4.4. Argumenty, parametry i wartoci funkcji................................................................. 67 4.5. Kontrola typów obiektów zewn:trznych .................................................................. 72 4.6. Pliki nagłówkowe..................................................................................................... 75 6 W potrzasku jzyka C Rozdział 5. Funkcje biblioteczne........................................................................77 5.1. Funkcja getchar zwraca warto typu int.................................................................. 78 5.2. Aktualizacja pliku sekwencyjnego ........................................................................... 78 5.3. Buforowanie wyjcia i przydział pami:ci................................................................. 80 5.4. Diagnostyka bł:dów funkcj( errno........................................................................... 81 5.5. Funkcja signal .......................................................................................................... 82 Rozdział 6. Preprocesor.....................................................................................85 6.1. Odst:py w makrodefinicjach.................................................................................... 86 6.2. Makrodefinicje a funkcje.......................................................................................... 86 6.3. Makrodefinicje a instrukcje...................................................................................... 90 6.4. Makrodefinicje a definicje typów............................................................................. 91 Rozdział 7. Kwestie przeno&no&ci ......................................................................93 7.1. W obliczu zmian....................................................................................................... 94 7.2. Co z nazwami? ......................................................................................................... 95 7.3. Rozmiar liczby całkowitej........................................................................................ 96 7.4. Czy znaki maj( znaki?.............................................................................................. 97 7.5. Operatory przesuni: bitowych................................................................................ 98 7.6. Zerowa komórka pami:ci......................................................................................... 99 7.7. Obcinanie przy dzieleniu........................................................................................ 100 7.8. Rozmiar liczby losowej.......................................................................................... 101 7.9. Zamiana wielkoci liter .......................................................................................... 102 7.10. Najpierw zwalnia, potem przydziela ponownie?................................................. 103 7.11. Przykładowe problemy nieprzenonoci ................................................................ 104 Rozdział 8. Porady i odpowiedzi do (wicze)......................................................109 8.1. Porady .................................................................................................................... 110 8.2. Odpowiedzi do wiczeA ......................................................................................... 113 Dodatek A Funkcja printf i zmienne listy argumentów......................................129 A.1. Rodzina funkcji printf............................................................................................ 129 A.1.1. Proste specyfikatory formatu........................................................................ 131 A.1.2. Modyfikatory................................................................................................ 135 A.1.3. Znaczniki...................................................................................................... 138 A.1.4. Zmienna precyzja i szeroko pola............................................................... 140 A.1.5. Neologizmy.................................................................................................. 141 A.1.6. Anachronizmy.............................................................................................. 141 A.2. Zmienne listy argumentów — varargs.h................................................................ 142 A.2.1. Implementacja varargs.h............................................................................... 146 A.3. Zmienne listy argumentów w wydaniu ANSI — stdarg.h..................................... 147 Skorowidz......................................................................................149 Rozdział 1. Pułapki leksykalne Czytajc zdanie, nie zastanawiamy si nad znaczeniem poszczególnych liter, tworzcych kolejne słowa. Litery same w sobie nios bowiem niewiele treci; grupujemy je wic w słowa i im przypisujemy znaczenie. Podobnie jest z programami w jzyku C i innych jzykach programowania. Pojedyncze znaki programu nie znacz prawie nic, jeli rozpatrywa# je osobno; znaczenia nabieraj dopiero w otoczeniu innych znaków, czyli w pewnym kontekcie. Dlatego w wierszu kodu: oba wystpienia znaku znacz zupełnie co innego. Mówic precyzyjniej, oba znaki wy- stpuj w ró(nych elementach leksykalnych: pierwszy jest czci symbolu , drugi czci cigu znaków. Dalej, znaczenie elementu leksykalnego jest całkowicie ró(ne od znaczenia jego poszczególnych znaków. Pojcie symbolu czy te( elementu leksykalnego odnosi si do jednostki programu, która odgrywa w nim mniej wicej tak rol jak słowo w zdaniu — element leksykalny ma podobne znaczenie wszdzie, gdzie wystpuje. Identyczna sekwencja znaków mo(e w jednym kontekcie nale(e# do jednego elementu leksykalnego, a w innym — do zupełnie innego. Mechanizm kompilatora, który jest odpowiedzialny za podział tekstu programu na elementy leksykalne, nosi czsto nazw analizatora leksykalnego. Rozwa(my nastpujc instrukcj: . Nastpnym jest znak otwierajcy nawias, dalej mamy identyfikator , symbol relacji wikszoci, identyfikator itd. W jzyku C pomidzy elementy leksykalne mo(emy wstawia# dowoln liczb znaków odstpów (spacji, tabulatorów i znaków nowego wiersza), wic instrukcj t moglibymy zapisa# równie( tak: Pierwszym elementem tej instrukcji jest słowo 16 W potrzasku jzyka C W niniejszym rozdziale zajmiemy si szczegółowo niektórymi najczciej popełnianymi błdami wynikajcymi z niezrozumienia znaczenia elementów leksykalnych i zale(- noci pomidzy nimi a tworzcymi je znakami. 1.1. Porównanie a przypisanie , a porówna- nia — znakami . W jzyku C przypisanie reprezentuje znak , a porównanie — znaki . Poniewa( w programie czciej wystpuj przypisania ni( porównania, taka repre- zentacja jest bardzo wygodna dla programisty, bo dla operacji czstszej stosuje krótszy zapis. Co wicej, w jzyku C przypisanie jest operatorem, co umo(liwia składanie wielu operacji przypisania w jednym wyra(eniu. Wygoda ta jest jednak 2ródłem wielu błdów wynikajcych z omyłkowego zapisania operatora przypisania w miejscu, gdzie powinien znajdowa# si operator porównania; jak w poni(szej instrukcji warunkowej, która powinna wykonywa# instrukcj , kiedy jest równe : W rzeczywistoci instrukcja ta przypisuje do warto# , a potem sprawdza, czy wyni- kiem operacji przypisania jest warto# niezerowa. Nastpnym przykładem mo(e by# ptla, która miała pomija# w pliku znaki odstpów (spacji, tabulacji i nowego wiersza): W ptli tej w pierwszym porównaniu znaku zamiast zapisano . Poniewa( operator przypisania ma priorytet ni(szy od operatora , „porównanie” w rzeczywistoci po- woduje przypisanie do wartoci wyra(enia: niezale(nie od pierwotnej wartoci . Dlatego ptla spowoduje „przewinicie” całego pliku. Co sta- nie si po wyczerpaniu znaków pliku, zale(y od tego, czy implementacja jzyka po- zwala na kontynuowanie odczytu po osigniciu ko5ca pliku. Jeli tak, program wejdzie w ptl niesko5czon. jest ró(na od zera, całe wyra(enie ma warto# W wikszoci jzyków programowania wywodzcych si z jzyka Algol, na przykład w Pascalu czy Adzie, operacja przypisania reprezentowana jest znakami Poniewa( warto# [ Pobierz całość w formacie PDF ] |