Programowanie w C : sprytne podejście do trudnych zagadnień
Transkrypt
Programowanie w C : sprytne podejście do trudnych zagadnień
Programowanie w C : sprytne podejście do trudnych zagadnień, których wołałbyś unikać (takich jak język C) / Zed A. Shaw. – Gliwice, 2016 Spis treści Podziękowania 12 Ta książka tak naprawdę nie jest o języku С Niezdefiniowane zachowania С to język zarazem świetny i paskudny Czego się nauczysz? Jak czytać tę książkę? Wideo Podstawowe umiejętności Czytanie i pisanie Zwracanie uwagi na szczegóły Wychwytywanie różnic Planowanie i debugowanie 13 14 15 16 16 17 18 18 18 19 19 Przygotowania Linux OS X Windows Edytor tekstu Nie używaj IDE 20 20 20 21 21 22 Ćwiczenie 1. Odkurzenie kompilatora Omówienie kodu w pliku Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 24 24 25 26 26 Ćwiczenie 2. Użycie pliku Makefile podczas kompilacji Użycie narzędzia make Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 28 28 29 30 30 Ćwiczenie 3. Sformatowane dane wyjściowe Co powinieneś zobaczyć? Zewnętrzne badania Jak to zepsuć? Zadania dodatkowe 32 33 33 33 34 Ćwiczenie 4. Użycie debugera Sztuczki z GDB Krótki przewodnik po GDB Krótki przewodnik po LLDB 36 36 36 37 Ćwiczenie 5. Nauka na pamięć operatorów w С Jak uczyć się na pamięć? Listy operatorów 40 40 41 Ćwiczenie 6. Nauka na pamięć składni С Słowa kluczowe Składnia struktur Słowo zachęty Słowo ostrzeżenia 46 46 47 50 51 Ćwiczenie 7. Zmienne i typy Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 52 53 54 54 Ćwiczenie 8. Konstrukcje if, else-if i else Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 56 57 57 58 Ćwiczenie 9. Pętla while i wyrażenia boolowskie Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 60 60 61 61 Ćwiczenie 10. Konstrukcja switch Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 62 64 65 65 Ćwiczenie 11. Tablice i ciągi tekstowe Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 66 67 68 69 Ćwiczenie 12. Wielkość i tablice Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 70 71 72 73 Ćwiczenie 13. Pętla for i tablica ciągów tekstowych 74 Co powinieneś zobaczyć? Zrozumienie tablicy ciągów tekstowych Jak to zepsuć? Zadania dodatkowe 75 76 76 77 Ćwiczenie 14. Tworzenie i użycie funkcji Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 78 79 80 80 Ćwiczenie 15. Wskaźniki, przerażające wskaźniki Co powinieneś zobaczyć? Poznajemy wskaźniki Praktyczne użycie wskaźników Leksykon wskaźnika Wskaźniki nie są tablicami Jak to zepsuć? Zadania dodatkowe 82 84 85 86 87 87 87 88 Ćwiczenie 16. Struktury i prowadzące do nich wskaźniki Co powinieneś zobaczyć? Poznajemy struktury Jak to zepsuć? Zadania dodatkowe 90 93 94 94 95 Ćwiczenie 17. Alokacja pamięci stosu i sterty Co powinieneś zobaczyć? Alokacja stosu kontra sterty Jak to zepsuć? Zadania dodatkowe 96 102 102 103 104 Ćwiczenie 18. Wskaźniki do funkcji Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 106 110 110 111 Ćwiczenie 19. Opracowane przez Zeda wspaniałe makra debugowania Problem obsługi błędów w С Makra debugowania Użycie dbg.h Co powinieneś zobaczyć? W jaki sposób CPP obsługuje makra? Zadania dodatkowe 112 112 113 115 118 118 120 Ćwiczenie 20. Zaawansowane techniki debugowania 122 Użycie makra debug() kontra GDB Strategia debugowania Zadania dodatkowe 122 124 125 Ćwiczenie 21. Zaawansowane typy danych i kontrola przepływu Dostępne typy danych Modyfikatory typu Kwalifikatory typów Konwersja typu Wielkość typu Dostępne operatory Operatory matematyczne Operatory danych Operatory logiczne Operatory bitowe Operatory boolowskie Operatory przypisania Dostępne struktury kontroli Zadania dodatkowe 126 126 126 127 127 128 129 130 130 131 131 131 131 132 132 Ćwiczenie 22. Stos, zakres i elementy globalne Pliki ex22.h i ex22.c Plik ex22_main.c Co powinieneś zobaczyć? Zakres, stos i błędy Jak to zepsuć? Zadania dodatkowe 134 134 136 138 139 140 141 Ćwiczenie 23. Poznaj mechanizm Duffa Co powinieneś zobaczyć? Rozwiązanie łamigłówki Dlaczego w ogóle mam się tak męczyć? Zadania dodatkowe 142 145 145 146 146 Ćwiczenie 24. Dane wejściowe, dane wyjściowe i pliki Co powinieneś zobaczyć? Jak to zepsuć? Funkcje wejścia-wyjścia Zadania dodatkowe 148 150 151 151 152 Ćwiczenie 25. Funkcje o zmiennej liczbie argumentów Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 154 158 158 158 Ćwiczenie 26. Projekt logfind 160 Specyfikacja logfind 160 Ćwiczenie 27. Programowanie kreatywne i defensywne Nastawienie programowania kreatywnego Nastawienie programowania defensywnego 8 strategii programisty defensywnego Zastosowanie ośmiu strategii Nigdy nie ufaj danym wejściowym Unikanie błędów Awarie powinny być wczesne i otwarte Dokumentuj założenia Preferuj prewencję zamiast dokumentacji Automatyzuj wszystko Upraszczaj i wyjaśniaj Myśl logicznie Kolejność nie ma znaczenia Zadania dodatkowe 162 162 163 164 164 164 168 169 170 170 171 171 172 172 173 Ćwiczenie 28. Pośrednie pliki Makefile Podstawowa struktura projektu Makefile Nagłówek Docelowe wersje programu Testy jednostkowe Operacje porządkujące Instalacja Sprawdzenie Co powinieneś zobaczyć? Zadania dodatkowe 174 174 175 176 177 178 180 180 180 181 181 Ćwiczenie 29. Biblioteki i linkowanie Dynamiczne wczytywanie biblioteki współdzielonej Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 182 183 185 187 187 Ćwiczenie 30. Zautomatyzowane testowanie Przygotowanie frameworka testów jednostkowych Zadania dodatkowe 188 189 193 Ćwiczenie 31. Najczęściej spotykane niezdefiniowane zachowanie 20 najczęściej spotykanych przypadków niezdefiniowanego zachowania Najczęściej spotykane niezdefiniowane zachowanie 194 196 196 Ćwiczenie 32. Lista dwukierunkowa 200 Czym są struktury danych? Budowa biblioteki Lista dwukierunkowa Definicja Implementacja Testy Co powinieneś zobaczyć? Jak można usprawnić kod? Zadania dodatkowe 200 200 202 202 204 207 210 210 211 Ćwiczenie 33. Algorytmy listy dwukierunkowej Sortowanie bąbelkowe i sortowanie przez scalanie Test jednostkowy Implementacja Co powinieneś zobaczyć? Jak można usprawnić kod? Zadania dodatkowe 212 212 213 215 217 218 219 Ćwiczenie 34. Tablica dynamiczna Wady i zalety Jak można usprawnić kod? Zadania dodatkowe 220 227 228 228 Ćwiczenie 35. Sortowanie i wyszukiwanie Sortowanie pozycyjne i wyszukiwanie binarne Unie w języku С Implementacja Funkcja RadixMap_find() i wyszukiwanie binarne RadixMap_sort() i radix_sort() Jak można usprawnić kod? Zadania dodatkowe 230 233 234 235 241 242 243 244 Ćwiczenie 36. Bezpieczniejsze ciągi tekstowe Dlaczego stosowanie ciągów tekstowych С to niewiarygodnie kiepski pomysł? Użycie bstrlib Poznajemy bibliotekę 246 Ćwiczenie 37. Struktura Hashmap Testy jednostkowe Jak można usprawnić kod? Zadania dodatkowe 250 257 259 260 Ćwiczenie 38. Algorytmy struktury Hashmap Co powinieneś zobaczyć? Jak to zepsuć? 262 267 268 246 248 249 Zadania dodatkowe 269 Ćwiczenie 39. Algorytmy ciągu tekstowego Co powinieneś zobaczyć? Analiza wyników Zadania dodatkowe 270 277 279 280 Ćwiczenie 40. Binarne drzewo poszukiwań Jak można usprawnić kod? Zadania dodatkowe 282 295 295 Ćwiczenie 41. Projekt devpkg Co to jest devpkg? Co chcemy zbudować? Projekt Biblioteki Apache Portable Runtime Przygotowanie projektu Pozostałe zależności Plik Makefile Pliki kodu źródłowego Funkcje bazy danych Funkcje powłoki Funkcje poleceń programu Funkcja main() w devpkg Ostatnie wyzwanie 296 296 296 297 297 299 299 299 300 302 305 309 314 316 Ćwiczenie 42. Stos i kolejka Co powinieneś zobaczyć? Jak można usprawnić kod? Zadania dodatkowe 318 321 321 322 Ćwiczenie 43. Prosty silnik dla danych statystycznych Odchylenie standardowe i średnia Implementacja Jak można użyć tego rozwiązania? Zadania dodatkowe 324 324 325 330 331 Ćwiczenie 44. Bufor cykliczny Testy jednostkowe Co powinieneś zobaczyć? Jak można usprawnić kod? Zadania dodatkowe 334 337 337 338 338 Ćwiczenie 45. Prosty klient TCP/IP Modyfikacja pliku Makefile Kod netclient 340 340 340 Co powinieneś zobaczyć? Jak to zepsuć? Zadania dodatkowe 344 344 344 Ćwiczenie 46. Drzewo trójkowe Wady i zalety Jak można usprawnić kod? Zadania dodatkowe 346 354 355 355 Ćwiczenie 47. Szybszy router URL Co powinieneś zobaczyć? Jak można usprawnić kod? Zadania dodatkowe 356 358 359 360 Ćwiczenie 48. Prosty serwer sieciowy Specyfikacja 362 362 Ćwiczenie 49. Serwer danych statystycznych Specyfikacja 364 364 Ćwiczenie 50. Routing danych statystycznych 366 Ćwiczenie 51. Przechowywanie danych statystycznych Specyfikacja 368 368 Ćwiczenie 52. Hacking i usprawnianie serwera 370 Zakończenie 372 Skorowidz 373 oprac. BPK