Przedmowa (11)
Podziękowania (15)
Wprowadzenie - Sztuka tworzenia przenośnego oprogramowania (17)
- Korzyści z przenośności (18)
- Części składowe platformy (20)
- Problem z założeniami (20)
- Standardy kodowania (21)
- Szkielet dla przenośnego programowania (21)
1. Koncepcje przenośności (23)
- Przenośność jest stanem umysłu, nie sposobem programowania (24)
- Rozwijaj dobre przenośne nawyki (24)
- Dobre nawyki są lepsze od szczegółowej znajomości błędów i standardów (25)
- Planuj przenośność dla nowego projektu (28)
- Przenoś stary kod (33)
2. ANSI C i C++ (37)
- Dlaczego nie inny język? (37)
- Dialekty C i C++ (39)
- Przenośność C i C++ (40)
3. Techniki stosowane podczas przenoszenia (43)
- Unikaj nowych funkcjonalności języka (44)
- Radź sobie ze zmienną dostępnością funkcjonalności (44)
- Używaj bezpiecznej serializacji i deserializacji danych (48)
- Dołączaj testowanie (50)
- Używaj opcji kompilacji (52)
- Oddziel pliki zależne od platformy od plików przenośnych (55)
- Pisz prosty kod (55)
- Używaj unikalnych nazw (56)
- Implementuj abstrakcje (58)
- Programowanie niskopoziomowe (74)
4. Edycja i kontrola plików źródłowych (81)
- Różnice w znacznikach końca linii plików tekstowych (82)
- Przenośne nazwy plików (83)
- Kontrola plików źródłowych (84)
- Narzędzia do budowania (89)
- Edytory (95)
- Podsumowanie (95)
5. Różnice pomiędzy procesorami (97)
- Wyrównanie (98)
- Uporządkowanie bajtów (101)
- Reprezentacja liczb całkowitych ze znakiem (108)
- Rozmiar typów macierzystych (108)
- Przestrzeń adresowa (111)
- Podsumowanie (112)
6. Operacje zmiennoprzecinkowe (113)
- Historia liczb zmiennoprzecinkowych (113)
- Standardowa obsługa liczb zmiennoprzecinkowych w C i C++ (114)
- Problemy z liczbami zmiennoprzecinkowymi (115)
- Obliczenia na liczbach stałoprzecinkowych (119)
- Przedstawianie bitowej reprezentacji liczby zmiennoprzecinkowej jako liczby całkowitej (120)
- Odpytywanie implementacji (124)
- Wyniki powodujące wyjątki (126)
- Formaty przechowywania (129)
- Podsumowanie (130)
7. Preprocesor (131)
- Symbole predefiniowane (132)
- Pliki nagłówkowe (133)
- Makropolecenia konfiguracyjne (136)
- Kompilacja warunkowa (137)
- Instrukcja pragma (138)
- Podsumowanie (139)
8. Kompilatory (141)
- Rozmiar struktury, upakowanie i wyrównanie (142)
- Niespójności w zarządzaniu pamięcią (145)
- Stos (146)
- Funkcja printf (148)
- Rozmiary i zachowanie typów (149)
- Konwencje wywołań (156)
- Zwracanie struktur (160)
- Pola bitowe (161)
- Komentarze (162)
- Podsumowanie (163)
9. Interfejs użytkownika (165)
- Rozwój interfejsów użytkownika (166)
- Macierzysty interfejs GUI czy interfejs aplikacji? (168)
- Grafika niskopoziomowa (168)
- Obsługa dźwięku (169)
- Urządzenia wejściowe (170)
- Narzędzia międzyplatformowe (171)
- Podsumowanie (171)
10. Obsługa sieci (173)
- Rozwój protokołów sieciowych (173)
- Interfejsy programistyczne (174)
- Podsumowanie (178)
11. Systemy operacyjne (179)
- Rozwój systemów operacyjnych (179)
- Środowiska goszczące i wolno stojące (180)
- Paradoks przenośności systemu operacyjnego (181)
- Pamięć (182)
- Procesy i wątki (184)
- Zmienne środowiskowe (190)
- Obsługa wyjątków (192)
- Przechowywanie danych użytkownika (193)
- Bezpieczeństwo i uprawnienia (196)
- Podsumowanie (198)
12. Biblioteki dynamiczne (199)
- Dynamiczne konsolidowanie (200)
- Ładowanie dynamiczne (200)
- Problemy z bibliotekami współużytkowanymi (201)
- Gnu LGPL (203)
- Biblioteki DLL w Windows (204)
- Obiekty współużytkowane w Linuksie (207)
- Szkielety, wtyczki i pakiety w systemie Mac OS X (209)
- Podsumowanie (212)
13. Systemy plików (213)
- Dowiązania symboliczne, skróty i synonimy (214)
- Specyfikacja ścieżki (215)
- Bezpieczeństwo i prawa dostępu (217)
- Osobliwości w Macintoshu (219)
- Atrybuty plików (220)
- Katalogi specjalne (220)
- Obróbka tekstu (220)
- Biblioteka uruchomieniowa C i przenośny dostęp do plików (221)
- Podsumowanie (222)
14. Skalowalność (223)
- Lepsze algorytmy to większa skalowalność (223)
- Skalowalność ma swoje granice (225)
- Podsumowanie (226)
15. Przenośność i dane (227)
- Dane aplikacji i pliki zasobów (227)
- Tworzenie przenośnej grafiki (231)
- Tworzenie przenośnego dźwięku (232)
- Podsumowanie (232)
16. Internacjonalizacja i lokalizacja (233)
- Łańcuchy i Unicode (234)
- Waluta (235)
- Data i Czas (236)
- Elementy interfejsu (237)
- Klawiatury (237)
- Podsumowanie (237)
17. Języki skryptowe (239)
- Niektóre wady języków skryptowych (240)
- JavaScript/ECMAScript (241)
- Python (242)
- Lua (243)
- Ruby (243)
- Podsumowanie (244)
18. Biblioteki i narzędzia międzyplatformowe (245)
- Biblioteki (246)
- Szkielety aplikacji (246)
- Podsumowanie (247)
A Biblioteka POSH (249)
- Symbole predefiniowane w POSH (250)
- Typy o określonym rozmiarze w POSH (251)
- Funkcje i makropolecenia narzędziowe w POSH (251)
B Zasady stosowane podczas pisania przenośnego oprogramowania (255)
Bibliografia (259)
Skorowidz (261)