Efektywny C. Wprowadzenie do profesjonalnego programowania - ebook
Efektywny C. Wprowadzenie do profesjonalnego programowania - ebook
C jest systemowym językiem programowania, więc zapewnia maksymalną wydajność sprzętu bazowego. Program napisany w C współpracuje bezpośrednio z warstwą sprzętową, co daje pełną kontrolę nad jego wykonywaniem, a sam kod jest krótki, prosty i działa szybko. Równocześnie można korzystać z zalet programowania wysokiego poziomu. W efekcie C od dwóch dekad pozostaje jednym z najpopularniejszych języków programowania. Trzeba jednak pamiętać o bardzo ważnym szczególe: programista, który używa C, musi wiedzieć, co robi.
Ta książka stanowi przystępne wprowadzenie do tworzenia w języku C profesjonalnego kodu wysokiej jakości. Jest adresowana do każdego, kto chce szybko opanować umiejętność pisania poprawnego, przenośnego i bezpiecznego kodu. Ułatwia również zrozumienie kluczowych zagadnień związanych z programowaniem w C, dzięki czemu wkrótce będziesz tworzyć programy, rozwiązywać problemy i budować działające systemy. Omówiono tu także tematykę debugowania, testowania i analizy kodu C. Sporo miejsca poświęcono dobrym praktykom programowania, dzięki którym łatwiej jest tworzyć poprawny i bezpieczny kod. Poszczególne rozdziały zostały uzupełnione zwięzłymi przykładami kodu i ćwiczeniami pozwalającymi utrwalić prezentowaną treść.
W książce:
- struktura programu napisanego w C, typy podstawowe, operatory, zmienne i funkcje
- przepływ sterowania programu i dynamiczna alokacja pamięci
- kodowanie i typy znaków
- operacje wejścia-wyjścia i standardowe strumienie C
- wykorzystywanie preprocesora
- testowanie, debugowanie i analiza kodu C
C: kod, który przetrwa próbę czasu!
Spis treści
Słowo wstępne Pascala Cuoqa
Słowo wstępne Olliego Whitehouse'a
Podziękowania
Wprowadzenie
- Krótka historia języka C
- Standard języka C
- Standard CERT tworzenia kodu w języku C
- Dla kogo jest ta książka?
- Zawartość książki
1. Wprowadzenie do języka C
- Tworzenie pierwszego programu C
- Kompilowanie i uruchamianie programu
- Dyrektywy preprocesora
- Funkcja main
- Sprawdzanie wartości zwracanych funkcji
- Sformatowane dane wyjściowe
- Edytory i zintegrowane środowiska programistyczne
- Kompilatory
- GNU Compiler Collection
- Clang
- Microsoft Visual Studio
- Przenośność
- Zachowanie zdefiniowane w implementacji
- Zachowanie, którego nie określono
- Zachowanie niezdefiniowane
- Zachowanie powiązane z ustawieniami regionalnymi i wspólne rozszerzenia
- Podsumowanie
2. Obiekty, funkcje i typy
- Obiekty, funkcje, typy i wskaźniki
- Deklarowanie zmiennych
- Zamiana wartości (pierwsza próba)
- Zamiana wartości (druga próba)
- Zasięg
- Okres przechowywania
- Wyrównanie
- Typy obiektów
- Typy boolowskie
- Typy znakowe
- Typy liczbowe
- Typy funkcyjne
- Typy pochodne
- Typy wskaźnikowe
- Tablice
- Struktury
- Unie
- Znaczniki
- Kwalifikatory typu
- const
- volatile
- restrict
- Ćwiczenia
- Podsumowanie
3. Typy arytmetyczne
- Liczby całkowite
- Dopełnienie i dokładność
- Plik nagłówkowy <limits.h>
- Deklarowanie typów całkowitoliczbowych
- Typy całkowitoliczbowe bez znaku
- Typy całkowitoliczbowe ze znakiem
- Stałe całkowitoliczbowe
- Reprezentacja zmiennoprzecinkowa
- Typy zmiennoprzecinkowe
- Arytmetyka liczb zmiennoprzecinkowych
- Wartości zmiennoprzecinkowe
- Stałe zmiennoprzecinkowe
- Przekształcanie typów arytmetycznych
- Ranga przekształcenia typów całkowitoliczbowych
- Promocje typów całkowitoliczbowych
- Zwykłe przekształcenia arytmetyczne
- Przykład przekształcenia niejawnego
- Bezpieczne przekształcenia
- Podsumowanie
4. Wyrażenia i operatory
- Zwykłe przypisanie
- Wyznaczanie wartości
- Wywoływanie funkcji
- Operatory inkrementacji i dekrementacji
- Pierwszeństwo operatorów i asocjatywność
- Kolejność wyznaczania wartości
- Niesekwencyjne i sekwencyjne nieścisłe wyznaczanie wartości
- Punkty sekwencji
- Operator sizeof
- Operatory arytmetyczne
- Jednoargumentowe operatory + i -
- Operator logiczny negacji
- Operatory multiplikatywne
- Operatory addytywne
- Operatory bitowe
- Operator dopełnienia
- Operatory przesunięcia
- Operator koniunkcji bitowej AND
- Operator bitowej alternatywy rozłącznej XOR
- Operator alternatywy bitowej OR
- Operatory logiczne
- Operatory rzutowania
- Operator warunkowy
- Operator _Alignof
- Operatory relacyjne
- Operatory przypisania złożonego
- Operator przecinka
- Arytmetyka wskaźnikowa
- Podsumowanie
5. Przepływ sterowania
- Instrukcje wyrażeniowe
- Instrukcje złożone
- Instrukcje wyboru
- Instrukcja if
- Instrukcja switch
- Instrukcje iteracji
- Instrukcja while
- Instrukcja do...while
- Instrukcja for
- Instrukcje skoku
- Instrukcja goto
- Instrukcja continue
- Instrukcja break
- Instrukcja return
- Ćwiczenia
- Podsumowanie
6. Pamięć alokowana dynamicznie
- Okres przechowywania
- Menedżery sterty i pamięci
- Kiedy korzystać z pamięci alokowanej dynamicznie
- Funkcje zarządzania pamięcią
- Funkcja malloc
- Funkcja aligned_alloc
- Funkcja calloc
- Funkcja realloc
- Funkcja reallocarray
- Funkcja free
- Stany pamięci
- Elastyczne elementy składowe tablicy
- Inne dynamicznie alokowane obszary pamięci
- Funkcja alloca
- Tablice o zmiennej długości
- Debugowanie problemów związanych z alokowanym obszarem pamięci
- Narzędzie dmalloc
- Systemy, w których bezpieczeństwo ma krytyczne znaczenie
- Ćwiczenia
- Podsumowanie
7. Znaki i łańcuchy
- Znaki
- ASCII
- Unicode
- Źródłowy i wykonawczy zestaw znaków
- Typy danych
- Stałe znakowe
- Sekwencje wyjścia
- Linux
- Windows
- Konwersja znaków
- Łańcuchy
- Literały łańcuchowe
- Funkcje obsługi łańcuchów
- Pliki nagłówkowe <string.h> i <wchar.h>
- Interfejsy sprawdzające ograniczenia dodatku Annex K
- POSIX
- Microsoft
- Podsumowanie
8. Operacje wejścia-wyjścia
- Standardowe strumienie operacji wejścia-wyjścia
- Buforowanie strumieni
- Strumienie predefiniowane
- Orientacja strumienia
- Strumienie tekstowe i binarne
- Otwieranie i tworzenie plików
- Funkcja fopen
- Funkcja open standardu POSIX
- Zamykanie plików
- Funkcja fclose
- Funkcja close standardu POSIX
- Odczytywanie i zapisywanie znaków oraz wierszy
- Opróżnianie strumieni
- Ustawianie pozycji w pliku
- Usuwanie plików i zmienianie ich nazwy
- Użycie plików tymczasowych
- Wczytywanie strumieni tekstu sformatowanego
- Odczytywanie strumieni binarnych i wykonywanie w nich zapisu
- Podsumowanie
9. Preprocesor
- Proces kompilacji
- Dołączanie plików
- Łańcuchy dołączania z apostrofami i nawiasami kątowymi
- Dołączanie warunkowe
- Generowanie błędów
- Zastosowanie strażników plików nagłówkowych
- Definicje makr
- Zastępowanie makr
- Makra typu ogólnego
- Makra predefiniowane
- Podsumowanie
10. Struktura programu
- Podstawy komponentyzacji
- Sprzęganie i spójność
- Wielokrotne użycie kodu
- Abstrakcje danych
- Typy nieprzenikalne
- Pliki wykonywalne
- Konsolidacja
- Tworzenie struktury prostego programu
- Kompilowanie kodu
- Podsumowanie
11. Debugowanie, testowanie i analizowanie
- Asercje
- Asercje statyczne
- Asercje fazy uruchamiania
- Ustawienia i flagi kompilatora
- GCC i Clang
- Visual C++
- Debugowanie
- Testowanie jednostkowe
- Analiza statyczna
- Analiza dynamiczna
- AddressSanitizer
- Ćwiczenia
- Podsumowanie
Bibliografia
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-8350-0 |
Rozmiar pliku: | 4,4 MB |