Остаточне керівництво та перелік книг C


400

Це питання намагається зібрати у спільноті список якісних книг на мова програмування, орієнтована на різні рівні кваліфікації.

C - це складна мова програмування, яку важко підібрати в дорозі, читаючи онлайн-підручники. Комплексна книга часто є найкращим способом вивчення мови, а пошук хорошої книги - перший крок. Важливо уникати погано написаних книг, а ще важливіше - книг, які містять серйозні технічні помилки.

Запропонуйте зміни до прийнятої відповіді, щоб додати якісні книги з приблизним рівнем майстерності та коротким розмиттям / описом кожної книги. ( Зверніть увагу, що питання заблоковано, тому нових відповідей не буде прийнято. Однозначна відповідь зберігається зі списком )

Не соромтеся обговорювати вибір книг, якість, заголовки, резюме, рівень кваліфікації та все, що ви бачите, що це неправильно. Книги, які C громадою визнають задовільними, залишатимуться у списку; решта буде регулярно видалятися.

Для книг, які мають відгуки Асоціації користувачів C та C ++ (ACCU), поряд із книгою слід додати посилання на ці відгуки.

Дивись також:


Це питання обговорювалося на Meta в рамках аудиту видалених питань 2018 .
Консенсус полягав у тому, щоб він залишався без змін і активно підтримувався.


31
Не принижувати питання, що добре, але ... більшості людей потрібні роки, щоб освоїти K&R. Там більше, ніж ви думаєте. Тонкість книги оманлива.
dmckee --- кошеня колишнього модератора

4
Якщо ви новачок у C, майте на увазі, що сучасний C - це ANSI C, і все, що передує цьому стандарту (1989), може бути застарілим. Зйомка в середині 90-х чи пізніших.
Дана Робінсон

7
@Dhaivat Я думаю, що ні, будьте обережні, щоб стрибати на прокладці K&R. Компанія K&R не стосується гарного дизайну програм, а також належної практики програмування, головним чином, тому, що вона була написана раніше, ніж хтось знав, що таке хороша практика програмування. Тут не зазначається, які частини мови С є зайвими або навіть небезпечними. Книга правильно вказана як довідковий посібник, її не слід використовувати для викладання / вивчення сучасного програмування.
Лундін

Я погоджуюся з Даною, що нічого, написане перед стандартизацією ANSI / ISO 89/90, не повинно з’являтися у такому списку. Ви також можете розглянути питання про те, які книги стосуються C99, а які - ні.
Лундін

Відповіді:


492

Увага

Це перелік випадкових книг різної якості. На думку деяких людей (з деяким виправданням), це вже не перелік рекомендованих книг. Деякі із перерахованих книг містять явно неправильні твердження або вчать неправильних / шкідливих практик. Люди, які знають про подібні книги, можуть редагувати цю відповідь, щоб допомогти вдосконалити її. Перегляньте список книг "С" пішов у сірий спосіб. Що з цим робити? , а також видалено аудит питань 2018 року .

Довідка (усі рівні)

  • Мова програмування на C (2-е видання) - Брайан В. Керніган та Денніс М. Річі (1988). Все-таки хороший, короткий, але повний вступ до C (C90, а не C99 або новіших версій), написаний винахідником C. Однак мова змінилася і хороший стиль C розвинувся за останні 25 років, і є частини книга, яка показує її вік.

  • С: Довідковий посібник (5-е видання) - Семюел П. Харбісон та Гай Р. Стіл (2002). Чудовий довідник про С, аж до С99. Це не підручник і, мабуть, непридатний для початківців. Чудово, якщо вам потрібно написати компілятор для C, як це мали зробити автори, коли вони починали.

  • C Pocket Reference (O'Reilly) - Пітер Принц та Улла Кірх-Принц (2002).

  • FAQ - comp.lang.c - Стів Саміт. Веб-сайт з відповідями на багато питань про C.

  • Різні варіанти стандартів мови C можна знайти тут . Існує онлайн-версія проекту стандарту С11 .

  • Новий стандарт C - анотована посилання (Безкоштовний PDF) - Дерек М. Джонс (2009). "Новий стандарт", про який йдеться, - це старий стандарт C99, а не C11.

  • Обґрунтування стандарту C99 .


Новачок

Проміжний

  • Сучасний С - Йенс Гуведт (2017 1-й Едн; 2020 2-й Едн). Охоплює C на 5 рівнях (зустріч, знайомство, пізнання, досвід, амбіції) від початку C до передової C. Він охоплює C11 і C17, включаючи потоки та атомний доступ, що мало хто з інших книг. Не всі компілятори розпізнають ці функції у всіх середовищах.

  • C Інтерфейси та реалізація - Девід Р. Гансон (1997). Надає інформацію про те, як визначити межу між інтерфейсом та реалізацією в C загальним та багаторазовим способом. Він також демонструє цей принцип, застосовуючи його для реалізації загальних механізмів та структур даних у С, таких як списки, набори, винятки, маніпуляції з рядками, розподільники пам'яті тощо. В основному, Гансон взяв увесь код, який він написав, як частину створення Icon та lcc та витягнув найкращі біти у формі, яку інші люди могли б використати для власних проектів. Це модель хорошого програмування на С, яка використовує сучасні методики дизайну (включаючи абстракцію даних Ліскова), показуючи, як організувати великий проект C накуп корисних бібліотек.

  • Головоломка С - Алан Р. Фейєр (1998)

  • Бібліотека Standard C - PJ Plauger (1992). Він містить повний вихідний код для реалізації стандартної бібліотеки C89, а також велику дискусію про дизайн та чому код розроблений так, як показано.

  • 21 століття C: C Поради нової школи - Бен Клеменс (2012). Окрім мови С, книга пояснює gdb, valgrind, autotools та git. Коментарі до стилю можна знайти в останній частині (глава 6 і далі).

  • Алгоритми С - Роберт Седжевік (1997). Дає зрозуміти реалізацію алгоритмів у C. Дуже чіткі та чіткі; напевно змусить вас викинути всі ваші інші книги алгоритмів і зберегти цю.

  • Покажчики на С - Кеннет Рек (1997).

  • Покажчики на С - Naveen Toppo та Hrishikesh Dewan (2013).

  • Розв’язання проблем та розробка програм у C (6-е видання) - Джері Р. Хенлі та Елліот Б. Коффман (2009).

  • Структури даних - передовий підхід із використанням С - Джефрі Есаков та Том Вайс (1989).

  • C Unleashed - Річард Хітфілд, Лоуренс Кірбі та ін. (2000). Не ідеально, але варто, щоб програмісти-посередники практикували проблеми, написані в цій книзі. Це хороший підхід до кулінарної книги, запропонований авторами comp.lang.c.

Експерт


Без категорії

  • Essential C (безкоштовно PDF) - Нік Парланте (2003). Зауважте, що це описує мову C90 у кількох точках ( наприклад , при обговоренні //коментарів та розміщенні змінних декларацій у довільних точках коду), тому до цього слід ставитися з певною обережністю.

  • Поширені запитання щодо програмування: Найчастіші запитання - Стів Самміт (1995). Це книга веб-сайту, перелічена раніше. Він не охоплює C99 або новіші стандарти.

  • C in a Nutshell - Пітер Принц та Тоні Крофорд (2005). Відмінна книга, якщо вам потрібна довідка про C99.

  • Функціональний C - Пітер Гартель та Хенк Мюллер (1997). Викладає сучасні практики, які є безцінними для програмування низького рівня, з урахуванням одночасності та модульності.

  • Практика програмування - Брайан В. Керніган та Роб Пайк (1999). Дуже хороша книга для супроводу K&R. Він також використовує C ++ та Java.

  • C Пастки та підводні камені А. Кеніга (1989). Дуже добре, але в стилі С попередньо встановлено стандарт C, що робить його менш рекомендованим в ці дні.

    Деякі заперечували про вилучення "Пасток та підводних каменів" із цього списку, оскільки це вловлює деяких людей у ​​помилках; інші продовжують сперечатися щодо його включення. Можливо, це слід розглядати як «експертну» книгу, оскільки для розуміння того, що змінилося з моменту виходу в світ, потрібні помірно широкі знання C.

  • Побудуй свій власний Лисп - Даніель Холден (2014). Приємний спосіб вивчити С.

  • MISRA-C - галузевий стандарт, виданий та підтримуваний Асоціацією надійності програмного забезпечення автомобільної промисловості. Обкладинка C89 та C99.

    Хоча це не така книга як така, багато програмістів рекомендують прочитати та реалізувати якомога більше її. MISRA-C спочатку був призначений як керівництво для критично важливих для безпеки додатків, але він застосовується до будь-якої області застосування, де бажаний стабільний, без помилок код C (хто не хоче менше помилок?). MISRA-C стає де-факто стандартом у всій вбудованій галузі та стає все більш популярною навіть у інших галузях програмування. Є (принаймні) три публікації стандарту (1998, 2004 та поточна версія від 2012). Існує також документ із рекомендаціями щодо дотримання MISRA від 2016 року та MISRA C: 2012 Поправка 1 - Додаткові рекомендації щодо безпеки для MISRA C: 2012 (опубліковано у квітні 2016 року).
    Зауважте, що деякі норми в правилах MISRA не відповідають кожному контексту. Наприклад, у директиві 4.12 зазначено "Динамічне розподілення пам'яті не повинно використовуватися". Це доречно у вбудованих системах, для яких розроблені правила MISRA; це скрізь не доречно. (Наприклад, компілятори зазвичай використовують динамічний розподіл пам'яті для таких речей, як таблиці символів, і обійтися без динамічного розподілу пам'яті було б складно, якщо не безглуздо.)

  • Заархівовані списки рецензованих ACCU книг про C для початківців (116 назв) 2007 та Advanced C (76 назв) з 2008 року. Більшість із них більше не виглядають на головному сайті, і ви не можете переглядати це за темою все одно.


Попередження

Будьте обережні до книг, написаних Гербертом Шильдтом . Зокрема, слід триматися подалі від С: Повна довідка (4-е видання, 2000 р.), Відома в деяких колах як C: Повна дурниця.

Також не використовуйте книгу Let Us C (16- е видання, 2017) Яшванта Канеткара. Багато людей розглядають це як застарілу книгу, яка викладає Turbo C і має багато застарілих, оманливих і невірних матеріалів. Наприклад, на сторінці 137 обговорюється очікуваний результат printf("%d %d %d\n", a, ++a, a++)та не класифікується це як визначене поведінка як слід.

Learn C The Hard Way (2015) Зеда Шоу. Книга зі змішаними відгуками. Критика цієї книги Тіма Хентенаара:

Підсумовуючи мої погляди, викладені нижче, автор викладає матеріал у значно спрощеному та оманливому вигляді, весь корпус - це безлад, і деякі запропоновані ним думки та аналізи є просто неправильними. Я намагався переглядати цю книгу очима новачка, але, на жаль, я упереджений багаторічним досвідом написання коду на C. Для мене очевидно, що або автор має хибне розуміння С, або він навмисно надто спрощується до момент, коли він насправді вводить читача в оману (навмисно чи іншим чином).

"Learn C The Hard Way" - це не книга, яку я міг би порекомендувати тому, хто навчається програмувати та вивчати C. Якщо ви вже грамотний програміст якоюсь іншою суміжною мовою, то це представляє цікаву та незвичну експозицію на C, хоча у мене є застереження щодо частин книги. Джонатан Леффлер


Застаріла


До інших дописувачів , не обов'язково зарахованих до історії ревізії, належать:
Алекс Локвуд , Бен Джексон , Бульбашки , кігті , коледот , Дана Робінсон , Даніель Холден , Дервін Тунк , dwc , Ерчі Хоу , Гарен , Хазіз , Йоган Безем , Джонатан Леффлер , Джошуа Партогі , Лукас , Лундін , Метт К. , мосплікс , Матьє М. , Midor , Nietzche-Jou , Норман Ремсі , r3st0r3 , ridthyself , Роберт С. Барнс , Стів Summit , Тім кільце , Тоні Бай , VMAtm


6
@ PabloBarríaUrenda Непридатний вміст слід вирішувати, позначаючи повідомлення. "Два кліки геть" - це дурне твердження, тому ваш прапор, ймовірно, буде відхилений. І жодної дискусії щодо того, чи є згаданий прапор образливою чи ні, тут також не повинно бути. Замість цього розміщуйте такі проблеми на meta.stackoverflow.com .
Лундін

1
Що нерозумно в "двох кліках геть"?
Пабло Баррія Уренда

3
У 2019 році я знайшов книгу <Modern C>дуже вагомою для читання, в ній використовується синтаксис c99 & c11, дуже компактний і добре написаний. А ви знаєте що? Це безкоштовно !!! Ви можете завантажити останню версію у форматі pdf тут: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (BTW, здається, автор оновлює та публікує книгу за вищезазначеним посиланням)
Ерік Ван

1
Я збирався додати книгу лише для того, щоб зрозуміти, що її редагували як нерекомендовану. Можливо, залиште видимих ​​у публікації, посилаючись на дезони, чому цього слід уникати. Можливо, навіть окремий розділ НЕ рекомендованих книг?
gst

3
Я безуспішно намагався відредагувати відповідь (мабуть, через неправильне форматування, яке вискакує ще до того, як я навіть зробила редагування). У всякому разі, тут принаймні дві рекомендовані книги перелічені як "яких слід уникати": iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Видаліть "Створіть свій власний Lisp" та "Learn C - важкий шлях", і додайте вищезазначене посилання до розділу " Попередження ".
gst
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.