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

Podobne dokumenty