Przewodnik i lista definitywnych książek C


400

To pytanie próbuje zebrać prowadzoną przez społeczność listę wysokiej jakości książek na stronie język programowania, ukierunkowany na różne poziomy umiejętności.

C jest złożonym językiem programowania, który jest trudny do zdobycia w podróży, czytając samouczki online. Kompleksowa książka jest często najlepszym sposobem na naukę języka, a znalezienie dobrej książki jest pierwszym krokiem. Ważne jest, aby unikać źle napisanych książek, a co ważniejsze, książek zawierających poważne błędy techniczne.

Proszę zaproponować zmiany w zaakceptowanej odpowiedzi, aby dodać wysokiej jakości książki, z przybliżonym poziomem umiejętności oraz krótkim napisem / opisem każdej książki. ( Pamiętaj, że pytanie jest zablokowane, więc żadne nowe odpowiedzi nie będą akceptowane. Pojedyncza odpowiedź jest utrzymywana na liście )

Nie krępuj się omawiać wyborów książek, jakości, nagłówków, podsumowań, poziomów umiejętności i wszystkiego, co uważasz za złe. Książki uznane przez społeczność C za zadowalające pozostaną na liście; reszta będzie regularnie usuwana.

W przypadku książek, które mają recenzje Stowarzyszenia Użytkowników C i C ++ (ACCU), należy dodać link do tych recenzji wraz z książką.

Zobacz też:


To pytanie zostało omówione na Meta w ramach Audytu pytań usuniętych 2018 .
Konsensus polegał na tym, aby nie wprowadzać go w błąd i aktywnie utrzymywać.


31
Nie pomijając pytania, które jest dobre, ale ... większość ludzi potrzebuje lat na opanowanie K&R. Jest tam więcej niż myślisz. Szczupłość książki jest zwodnicza.
dmckee --- były moderator kociąt

4
Jeśli dopiero zaczynasz przygodę z C, pamiętaj, że współczesne C to ANSI C i wszystko, co poprzedza ten standard (1989), może być bardzo nieaktualne. Strzelaj w połowie lat 90. lub później.
Dana Robinson

7
@Dhaivat Nie sądzę, uważaj, aby wskoczyć na modę K&R. K&R nie zajmuje się dobrą konstrukcją programu ani dobrą praktyką programowania, głównie dlatego, że został napisany, zanim ktokolwiek wiedział, co to jest dobra praktyka programowania. Nie wspomina, które części języka C są zbędne, a nawet niebezpieczne. Książka jest poprawnie wymieniona jako podręcznik referencyjny, nie należy jej używać do nauczania / uczenia się nowoczesnego programowania.
Lundin,

Zgadzam się z Daną, że nic nie napisane przed standaryzacjami ANSI / ISO w 89/90 nie powinno pojawić się na takiej liście. Możesz także rozważyć, które książki dotyczą C99, a które nie.
Lundin,

Odpowiedzi:


492

Ostrzeżenie

To jest lista losowych książek o różnej jakości. Zdaniem niektórych osób (z pewnym uzasadnieniem) nie jest to już lista zalecanych książek. Niektóre z wymienionych książek zawierają rażąco niepoprawne stwierdzenia lub uczą złych / szkodliwych praktyk. Osoby znające takie książki mogą edytować tę odpowiedź, aby ją poprawić. Zobacz listę książek C zwariował. Co z tym zrobić? , a także usunięto kontrolę pytań 2018 .

Referencje (wszystkie poziomy)


Początkujący

Pośredni

  • Modern C - Jens Gustedt (2017 1st Edn; 2020 2nd Edn). Obejmuje C na 5 poziomach (spotkanie, znajomość, poznanie, doświadczenie, ambicja) od początku C do zaawansowanego C. Obejmuje C11 i C17, w tym wątki i dostęp atomowy, co robi niewiele innych książek. Nie wszystkie kompilatory rozpoznają te funkcje we wszystkich środowiskach.

  • C Interfejsy i implementacje - David R. Hanson (1997). Zawiera informacje na temat definiowania granicy między interfejsem a implementacją w języku C w sposób ogólny i wielokrotnego użytku. Demonstruje również tę zasadę, stosując ją do implementacji wspólnych mechanizmów i struktur danych w C, takich jak listy, zestawy, wyjątki, manipulacje ciągami, alokatory pamięci i inne. Zasadniczo Hanson wziął cały kod, który napisał w ramach budowania Icon i lcc, i wyciągnął najlepsze fragmenty w formie, którą inni mogliby wykorzystać do własnych projektów. Jest to model dobrego programowania w C z wykorzystaniem nowoczesnych technik projektowania (w tym abstrakcja danych Liskowa), pokazujący, jak zorganizować duży projekt C jako zbiór przydatnych bibliotek.

  • Puzzle C - Alan R. Feuer (1998)

  • The Standard C Library - PJ Plauger (1992). Zawiera kompletny kod źródłowy do implementacji standardowej biblioteki C89, wraz z obszerną dyskusją na temat projektu i dlaczego kod został zaprojektowany tak, jak pokazano.

  • 21st Century C: C Wskazówki z nowej szkoły - Ben Klemens (2012). Oprócz języka C książka wyjaśnia gdb, valgrind, autotools i git. Komentarze na temat stylu znajdują się w ostatniej części (rozdział 6 i kolejne).

  • Algorytmy w C - Robert Sedgewick (1997). Daje ci prawdziwy wgląd w algorytmy implementacji w C. Bardzo przejrzysty i przejrzysty; prawdopodobnie sprawi, że będziesz chciał wyrzucić wszystkie swoje książki z algorytmami i zachować ten.

  • Pointers on C - Kenneth Reek (1997).

  • Pointers in C - Naveen Toppo and Hrishikesh Dewan (2013).

  • Rozwiązywanie problemów i projektowanie programów w C (wydanie 6) - Jeri R. Hanly i Elliot B. Koffman (2009).

  • Struktury danych - zaawansowane podejście z wykorzystaniem C - Jeffrey Esakov i Tom Weiss (1989).

  • C Unleashed - Richard Heathfield, Lawrence Kirby i in. (2000). Nie jest to idealne, ale warto pośrednich programistów ćwiczących problemy napisane w tej książce. Jest to dobre podejście podobne do książki kucharskiej sugerowane przez współtwórców comp.lang.c.

  • Programowanie obiektowe z ANSI-C (darmowy PDF) - Axel-Tobias Schreiner (1993). Kod jest nieco zawiły. Jeśli chcesz C ++, użyj C ++. Oczywiście używa tylko C90.

Ekspert


Bez kategorii

  • Essential C (bezpłatny plik PDF) - Nick Parlante (2003). Zauważ, że opisuje to język C90 w kilku punktach ( np. Podczas omawiania //komentarzy i umieszczania deklaracji zmiennych w dowolnych punktach kodu), dlatego należy zachować ostrożność.

  • Często zadawane pytania dotyczące programowania C: Często zadawane pytania - Steve Summit (1995). To jest książka strony internetowej wymienionej wcześniej. Nie obejmuje C99 ani późniejszych standardów.

  • C in a Nutshell - Peter Prinz i Tony Crawford (2005). Doskonała książka, jeśli potrzebujesz referencji do C99.

  • Funkcjonalne C - Pieter Hartel i Henk Muller (1997). Uczy nowoczesnych praktyk, które są nieocenione w programowaniu na niskim poziomie, z uwzględnieniem współbieżności i modułowości.

  • Praktyka programowania - Brian W. Kernighan i Rob Pike (1999). Bardzo dobra książka do towarzyszenia K&R. Używa także C ++ i Java.

  • C Pułapki i pułapki A. Koeniga (1989). Bardzo dobrze, ale styl C wyprzedza standardowy C, co czyni go mniej godnym polecenia w dzisiejszych czasach.

    Niektórzy opowiadali się za usunięciem „pułapek i pułapek” z tej listy, ponieważ uwięziło to niektórych ludzi w popełnianiu błędów; inni nadal opowiadają się za jego włączeniem. Być może należy ją traktować jako książkę „ekspercką”, ponieważ wymaga ona umiarkowanie obszernej znajomości języka C, aby zrozumieć, co się zmieniło od czasu publikacji.

  • Zbuduj własne Lisp - Daniel Holden (2014). Przyjemny sposób na naukę C.

  • MISRA-C - standard branżowy opublikowany i utrzymywany przez Stowarzyszenie Niezawodności Oprogramowania Przemysłu Motoryzacyjnego. Obejmuje C89 i C99.

    Chociaż nie jest to książka jako taka, wielu programistów zaleca przeczytanie i wdrożenie jej jak największej liczby. MISRA-C pierwotnie miał służyć przede wszystkim jako wytyczne dla aplikacji krytycznych dla bezpieczeństwa, ale ma zastosowanie do każdego obszaru aplikacji, w którym pożądany jest stabilny, wolny od błędów kod C (kto nie chce mniej błędów?). MISRA-C staje się de facto standardem w całej branży systemów wbudowanych i zyskuje coraz większą popularność nawet w innych gałęziach programowania. Istnieją (przynajmniej) trzy publikacje standardu (1998, 2004 i aktualna wersja z 2012 roku). Istnieje również dokument Wytycznych zgodności MISRA z 2016 r. Oraz MISRA C: 2012 Poprawka 1 - Dodatkowe wytyczne bezpieczeństwa dla MISRA C: 2012 (opublikowane w kwietniu 2016 r.).
    Należy pamiętać, że niektóre ograniczenia w regułach MISRA nie są odpowiednie w każdym kontekście. Na przykład dyrektywa 4.12 stanowi: „Nie należy stosować dynamicznego przydziału pamięci”. Jest to właściwe w systemach wbudowanych, dla których zaprojektowano reguły MISRA; nie wszędzie jest to właściwe. (Na przykład kompilatory zwykle używają dynamicznej alokacji pamięci do takich rzeczy jak tablice symboli, a obejście się bez dynamicznej alokacji pamięci byłoby trudne, jeśli nie niedorzeczne.)

  • Zarchiwizowane listy książek recenzowanych przez ACCU na temat Beginner's C (116 tytułów) z 2007 roku i Advanced C (76 tytułów) z 2008 roku. Większość z nich nie wygląda już na główną stronę i nie można przeglądać tego według tematu tak czy siak.


Ostrzeżenia

Uważaj na książki Herberta Schildta . W szczególności powinieneś trzymać się z dala od C: The Complete Reference (4th Edition, 2000), znanego w niektórych kręgach jako C: The Complete Nonsense.

Również nie korzystać z książki Let Us C (16 th Edition, 2017) przez Yashwant Kanetkar. Wiele osób uważa to za przestarzałą książkę, która uczy Turbo C i zawiera wiele przestarzałych, wprowadzających w błąd i niewłaściwych materiałów. Na przykład, strona 137 omawia oczekiwane dane wyjściowe printf("%d %d %d\n", a, ++a, a++)i nie klasyfikuje ich jako niezdefiniowane zachowanie, jak powinno.

Dowiedz się C The Hard Way (2015) autor: Zed Shaw. Książka z mieszanymi recenzjami. Krytyka tej książki Tima Hentenaara:

Podsumowując moje poglądy, które zostały przedstawione poniżej, autor przedstawia materiał w bardzo uproszczony i mylący sposób, cały korpus jest zawiązany, a niektóre opinie i analizy, które on oferuje, są po prostu błędne. Próbowałem zobaczyć tę książkę oczami nowicjusza, ale niestety jestem stronniczy przez lata doświadczenia w pisaniu kodu w C. Jest dla mnie oczywiste, że albo autor ma wadliwe rozumienie C, albo celowo upraszcza wskaż, gdzie faktycznie wprowadza w błąd czytelnika (celowo lub w inny sposób).

„Learn C The Hard Way” nie jest książką, którą mógłbym polecić komuś, kto uczy się programowania i nauki C. Jeśli już jesteś kompetentnym programistą w jakimś innym pokrewnym języku, to jest to ciekawa i niezwykła ekspozycja na temat C, choć mam zastrzeżenia do części książki. Jonathan Leffler


Przestarzały


Inni współpracownicy , niekoniecznie kredytowane w historii wersji, to:
Alex Lockwood , Ben Jackson , Bubbles , pazury , coledot , Dana Robinson , Daniel Holden , Dervin Thunk , DWC , Erci Hou , Garen , haziz , Johan Bezem , Jonathan Leffler , Joshua Partogi , Lucas , Lundin , Matt K. , mossplix , Matthieu M. , midor , Nietzche-jou , Norman Ramsey , r3st0r3 , ridthyself , Robert S. Barnes , Steve Summit , Tim Ring , Tony Bai , VMAtm


6
@ PabloBarríaUrenda Nieodpowiednie treści należy rozwiązać, oznaczając post. „Dwa kliknięcia dalej” to głupie stwierdzenie, więc Twoja flaga prawdopodobnie zostałaby odrzucona. Nie powinno tu też być żadnej debaty na temat tego, czy wspomniana flaga jest obraźliwa, czy nie. Zamiast tego opublikuj takie uwagi na stronie meta.stackoverflow.com .
Lundin,

1
Co jest głupiego w „oddaleniu o dwa kliknięcia”?
Pablo Barría Urenda

3
Ponieważ w roku 2019 książka była <Modern C>bardzo warta przeczytania, używa dużo składni c99 i c11, jest bardzo zwarta i dobrze napisana. I wiesz co? Jest wolne !!! Możesz pobrać najnowszą wersję jako pdf tutaj: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (BTW, wydaje się, że autor aktualizuje i publikuje książkę w powyższym linku w razie potrzeby)
Eric Wang

1
Już miałem dodać książkę, żeby zdać sobie sprawę, że została wydana jako niezalecana. Może zostaw tych widocznych w poście, powołując się na powody, dla których należy tego unikać. Może nawet osobna sekcja NIE polecanych książek?
gst

3
Próbowałem bezskutecznie edytować odpowiedź (najwyraźniej z powodu niepoprawnego formatowania, które pojawia się nawet przed wykonaniem edycji). W każdym razie co najmniej dwie zalecane książki są wymienione jako „do uniknięcia” tutaj: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Usuń „Zbuduj własne Lisp” i „Naucz się C na twardo” i dodaj powyższy link do sekcji Ostrzeżenia .
gst
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.