The Definitive C Книга Руководство и список

400

Этот вопрос пытается собрать поддерживаемый сообществом список качественных книг о язык программирования, ориентированный на различные уровни квалификации.

C - это сложный язык программирования, который сложно освоить на ходу, читая онлайн-уроки. Подробная книга часто является лучшим способом изучения языка, и поиск хорошей книги - это первый шаг. Важно избегать плохо написанных книг и, что еще более важно, книг, которые содержат серьезные технические ошибки.

Пожалуйста, внесите изменения в принятый ответ, чтобы добавить качественные книги с приблизительным уровнем квалификации и кратким описанием / описанием каждой книги. ( Обратите внимание, что вопрос заблокирован, поэтому новые ответы не будут приняты. В списке сохраняется один ответ )

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

Для книг, которые имеют рецензии Ассоциации пользователей C и C ++ (ACCU), ссылка на эти рецензии должна быть добавлена ​​вместе с книгой.

Смотрите также:


Этот вопрос обсуждался на Meta в рамках аудита удаленных вопросов 2018 года .
Консенсус состоял в том, чтобы сохранить его без изменений и активно поддерживать.

lillq
источник
31
Не умалять вопрос, что хорошо, но ... большинству людей требуются годы, чтобы освоить K & R. Там больше, чем вы думаете. Тонкость книги обманчива.
dmckee --- котенок экс-модератора
4
Если вы новичок в C, имейте в виду, что современный C - это ANSI C, и все, что предшествовало этому стандарту (1989), может быть крайне устаревшим. Стрелять в середине 90-х или позже.
Дана Робинсон
7
@Dhaivat Я думаю, нет, будьте осторожны, чтобы запрыгнуть на подножку K & R. K & R не рассматривает ни хороший дизайн программы, ни хорошую практику программирования, главным образом потому, что она была написана прежде, чем кто-либо знал, что такое хорошая практика программирования. Он не упоминает, какие части языка Си являются лишними или даже опасными. Книга правильно указана в качестве справочного пособия, ее не следует использовать для преподавания / изучения современного программирования.
Лундин
Я согласен с Даной, что ничто из написанного до стандартизации ANSI / ISO в 89/90 не должно появляться в таком списке. Вы также можете указать, какие книги относятся к С99, а какие нет.
Лундин

Ответы:

492

Предупреждение

Это список случайных книг разного качества. По мнению некоторых людей (с некоторым обоснованием), это больше не список рекомендуемых книг. Некоторые из перечисленных книг содержат явно неверные утверждения или учат неправильным / вредным практикам. Люди, которым известны такие книги, могут редактировать этот ответ, чтобы улучшить его. См . Список книг C потерял свою актуальность. Что с этим делать? , а также удаленный вопрос аудита 2018 года .

Ссылка (все уровни)


начинающий

промежуточный

  • Modern C - Jens Gustedt (2017, 1-й Edn; 2020, 2-й Edn). Охватывает C на 5 уровнях (встреча, знакомство, познание, опыт, амбиции) от начала C до продвинутого C. Он охватывает C11 и C17, включая потоки и атомарный доступ, что делают немногие другие книги. Не все компиляторы распознают эти функции во всех средах.

  • Интерфейсы и реализации C - Дэвид Р. Хэнсон (1997). Предоставляет информацию о том, как определить границу между интерфейсом и реализацией в C общим и многократно используемым способом. Он также демонстрирует этот принцип, применяя его к реализации общих механизмов и структур данных в C, таких как списки, наборы, исключения, манипуляции со строками, распределители памяти и многое другое. По сути, Хансон взял весь код, который он написал как часть создания Icon и lcc, и вытащил лучшие биты в форме, которую другие люди могли бы использовать для своих собственных проектов. Это модель хорошего C-программирования с использованием современных методов проектирования (включая абстракцию данных Лискова), показывающая, как организовать большой C-проект в виде набора полезных библиотек.

  • The C Puzzle Book - Алан Р. Фейер (1998)

  • Стандартная библиотека C - PJ Plauger (1992). Он содержит полный исходный код для реализации стандартной библиотеки C89, а также подробное обсуждение дизайна и того, почему код разработан так, как показано.

  • 21-й век C: C Советы от новой школы - Бен Клеменс (2012). В дополнение к языку C в книге описываются gdb, valgrind, autotools и git. Комментарии к стилю находятся в последней части (глава 6 и далее).

  • Алгоритмы на Си - Роберт Седжвик (1997). Дает вам реальное понимание реализации алгоритмов на C. Очень ясный и понятный; вероятно, вы захотите выбросить все остальные книги по алгоритмам и оставить эту.

  • Указатели на C - Кеннет Рик (1997).

  • Указатели на Си - Навин Топпо и Хришикеш Деван (2013).

  • Решение проблем и разработка программ на языке Си (6-е издание) - Джери Р. Ханли и Эллиот Б. Коффман (2009).

  • Структуры данных - расширенный подход с использованием C - Джеффри Эсаков и Том Вайс (1989).

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

эксперт


Без

  • Essential C (бесплатный PDF) - Ник Парланте (2003). Обратите внимание, что это описывает язык C90 в нескольких точках ( например , при обсуждении //комментариев и размещении объявлений переменных в произвольных точках в коде), поэтому к нему следует относиться с некоторой осторожностью.

  • Вопросы и ответы по программированию: часто задаваемые вопросы - Стив Саммит (1995). Это книга сайта, перечисленного ранее. Это не покрывает C99 или более поздние стандарты.

  • C в двух словах - Питер Принц и Тони Кроуфорд (2005). Отличная книга, если вам нужна ссылка на C99.

  • Функционал С - Питер Хартел и Хенк Мюллер (1997). Обучает современным методам, которые неоценимы для низкоуровневого программирования с учетом параллелизма и модульности.

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

  • C Ловушки и ловушки А. Кениг (1989). Очень хорошо, но стиль C предшествует стандарту C, что делает его менее рекомендуемым в наши дни.

    Некоторые выступают за исключение «ловушек и ловушек» из этого списка, потому что некоторые люди попадают в ловушку ошибок; другие продолжают отстаивать его включение. Возможно, ее следует рассматривать как «экспертную» книгу, потому что для понимания того, что изменилось с момента ее публикации, требуется умеренно обширное знание языка Си.

  • Создай свой собственный Лисп - Даниэль Холден (2014). Приятный способ выучить C.

  • MISRA-C - отраслевой стандарт, публикуемый и поддерживаемый Ассоциацией по надежности программного обеспечения автомобильной промышленности. Обложки С89 и С99.

    Хотя это не книга как таковая, многие программисты рекомендуют читать и реализовывать как можно больше. Первоначально MISRA-C был задуман как руководство для приложений, критически важных для безопасности, но он применим к любой области приложения, где требуется стабильный, безошибочный код C (кто не хочет меньше ошибок?). MISRA-C становится стандартом де-факто во всей индустрии встраиваемых систем и становится все более популярным даже в других областях программирования. Существует (как минимум) три публикации стандарта (1998, 2004 и текущая версия от 2012). Существует также документ с рекомендациями по соответствию MISRA от 2016 года и поправка 1 к MISRA C: 2012 - Дополнительные рекомендации по безопасности для MISRA C: 2012 (опубликовано в апреле 2016 года).
    Обратите внимание, что некоторые ограничения в правилах MISRA не подходят для каждого контекста. Например, директива 4.12 гласит: «Динамическое распределение памяти не должно использоваться». Это подходит для встроенных систем, для которых разработаны правила MISRA; это не везде уместно. (Например, компиляторы обычно используют динамическое выделение памяти для таких вещей, как таблицы символов, и обойтись без динамического выделения памяти будет сложно, если не абсурдно.)

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


Предупреждения

Остерегайтесь книг, написанных Гербертом Шильдтом . В частности, вам следует держаться подальше от C: The Complete Reference (4th Edition, 2000), известной в некоторых кругах как C: The Complete бессмыслица.

Также не следует использовать книгу Пусть нам С (16 - е издание, 2017) по Яшвантом Kanetkar. Многие люди рассматривают ее как устаревшую книгу, которая учит Turbo C и содержит много устаревшего, вводящего в заблуждение и неправильного материала. Например, на странице 137 обсуждается ожидаемый результат от printf("%d %d %d\n", a, ++a, a++)и не классифицируется как неопределенное поведение, как это должно быть.

Узнайте С трудный путь (2015) Зед Шоу. Книга со смешанными рецензиями. Критика этой книги Тимом Хентенааром:

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

«Learn C The Hard Way» - это не книга, которую я мог бы порекомендовать кому-то, кто одновременно учится программировать и изучает C. Если вы уже являетесь компетентным программистом на каком-либо другом родственном языке, то это интересная и необычная экспозиция С, хотя у меня есть оговорки по поводу частей книги. Джонатан Леффлер


Устаревшие


Другие участники , не обязательно зачисленные в историю изменений, включают в себя:
Алекс Локвуд , Бен Джексон , Bubbles , когти , coledot , Дана Робинсон , Даниэль Холден , Дервин Танк , DWC , Эрчи Хоу , Гарен , Хазиз , Йохан Безем , Джонатан Леффлер , Джошуа Партоги , Лукас , Лундин , Мэтт К. , Мосспликс , Матье М. , Мидор , Ницше-Жу , Норман Рэмси , r3st0r3 , Riththyself , Роберт С. Барнс , Стив Саммит , Тим Ринг , Тони Бай , 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 (кстати, кажется, что автор обновляет и публикует книгу по вышеуказанной ссылке по мере необходимости)
Эрик Ван
1
Я собирался добавить книгу только для того, чтобы понять, что она отредактирована как нерекомендованная. Может быть, оставить тех, кто виден в посте со ссылкой на причины, почему этого следует избегать. Может быть, даже отдельный раздел НЕ рекомендуемых книг?
GST
3
Я безуспешно пытался отредактировать ответ (по-видимому, из-за неправильного форматирования, которое выскакивает еще до того, как я произвожу правку). В любом случае, по крайней мере, две рекомендуемые книги перечислены как «следует избегать» здесь: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Удалите «Создайте свой собственный Лисп» и «Изучите трудный путь» и добавьте приведенную выше ссылку в раздел « Предупреждения ».
GST