okladka

Każdy, nawet najbardziej doświadczony programista, popełnia błędy podczas pracy. Niektóre z nich wynikają z pośpiechu, inne -- z użycia niewłaściwych 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, jeśli zrozumie się przyczyny ich powstawania.

Książka "W potrzasku języka 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 wiadomościom, 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łaściwe stosowanie funkcji bibliotecznych
  • Makrodefinicje
  • Przenośność kodu

Nie trać czasu na usuwanie błędów --
dowiedz się, co robić, żeby w ogóle nie występowały.

O autorze:
Andrew Koenig jest członkiem działu badającego systemy oprogramowania w Shannon Laboratory firmy AT&T oraz redaktorem projektu komitetów standaryzacyjnych języka C++. [więcej...\


Wstęp (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 zagnieżdżonych instrukcjach if (34)
Rozdział 3. Pułapki semantyczne (37)
  • 3.1. Wskaźniki i tablice (37)
  • 3.2. Wskaźniki nie są tablicami (42)
  • 3.3. Deklaracje tablic w roli parametrów (43)
  • 3.4. Niebezpieczne synekdochy (45)
  • 3.5. Wskaźniki puste a ciągi niepuste (46)
  • 3.6. Zliczanie a asymetryczne granice zakresów (46)
  • 3.7. Kolejność obliczania w wyrażeniu (55)
  • 3.8. Operatory &&, || i ! (57)
  • 3.9. Przepełnienie zakresu liczby całkowitej (58)
  • 3.10. Zwracanie wartości 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 wartości funkcji (67)
  • 4.5. Kontrola typów obiektów zewnętrznych (72)
  • 4.6. Pliki nagłówkowe (75)
Rozdział 5. Funkcje biblioteczne (77)
  • 5.1. Funkcja getchar zwraca wartość typu int (78)
  • 5.2. Aktualizacja pliku sekwencyjnego (78)
  • 5.3. Buforowanie wyjścia 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 wielkości liter (102)
  • 7.10. Najpierw zwalniać, potem przydzielać ponownie? (103)
  • 7.11. Przykładowe problemy nieprzenośności (104)
Rozdział 8. Porady i odpowiedzi do ćwiczeń (109)
  • 8.1. Porady (110)
  • 8.2. Odpowiedzi do ćwiczeń (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)