Ответ 1
Warning
This is a list of random books of diverse quality. In the view of some people (with some justification), it is no longer a list of recommended books. Some of the listed books contain blatantly incorrect statements or teach wrong/harmful practices. People who are aware of such books can edit this answer to help improve it. See The C book list has gone haywire. What to do with it?, and also Deleted question audit 2018.
Ссылка (все уровни)
Язык программирования Си (2-е издание) - Брайан У. Керниган и Деннис М. Ричи (1988). Все еще хорошее, краткое, но полное введение в C (C90, а не C99 или более поздние версии), написанное изобретателем C. Однако язык изменился, и за последние 25 лет был разработан хороший стиль C, и есть части книга, показывающая его возраст.
C: Справочное руководство (5-е издание) - Сэмюэль П. Харбисон и Гай Р. Стил (2002). Отличный справочник по C, вплоть до C99. Это не учебник, и, вероятно, не подходит для начинающих. Прекрасно, если вам нужно написать компилятор для C, как это делали авторы, когда начинали.
C Pocket Reference (О'Рейли) - Питер Принц и Улла Кирх-Принц (2002).
Comp.lang.c FAQ - Стив Саммит. Веб-сайт с ответами на многие вопросы о C.
Различные версии стандартов языка C можно найти здесь here. Существует онлайн-версия чернового стандарта C11 draft C11 standard.
Новый стандарт С - аннотированная ссылка (Free PDF) - Дерек М. Джонс (2009). Упоминаемый "новый стандарт" - это старый стандарт C99, а не C11.
Новичок
Программирование на С (4-е издание) - Стивен Кочан (2014). Хорошее общее введение и учебник.
C Primer Plus (5-е издание) - Стивен Прата (2004)
Программирование на C: современный подход (2-е издание) - K. N. King (2008). Хорошая книга для изучения C.
Книга о Си - Аль Келли/Ира Пол (1998).
Книга C (бесплатно онлайн) - Майк Банахан, Деклан Брейди и Марк Доран (1991).
C: Как программировать (8-е издание) - Пол Дейтель и Харви М. Дейтель (2015). Много хороших советов и лучших практик для начинающих. Индекс очень хороший и служит достойной ссылкой (только не полностью и очень поверхностно).
Head First C - Дэвид Гриффитс и Доун Гриффитс (2012).
Начало C (5-е издание) - Айвор Хортон (2013). Очень хорошее объяснение указателей, использующее множество маленьких, но полных программ.
Самс учит себя за 21 день - Брэдли Л. Джонс и Питер Эйткен (2002). Очень хороший вводный материал.
Прикладное программирование в ANSI C - Ричард Джонсонбо и Мартин Калин (1996).
Промежуточное
Объектно-ориентированное программирование с использованием ANSI-C (Free PDF) - Axel-Tobias Schreiner (1993). Код становится немного запутанным. Если вы хотите C++, используйте C++.
Интерфейсы и реализации C - Дэвид Р. Хэнсон (1997). Предоставляет информацию о том, как определить границу между интерфейсом и реализацией в C общим и многократно используемым способом. Он также демонстрирует этот принцип, применяя его к реализации общих механизмов и структур данных в C, таких как списки, наборы, исключения, манипуляции со строками, распределители памяти и многое другое. По сути, Хансон взял весь код, который он написал как часть построения Icon и lcc, и вытащил лучшие биты в форме, которую другие люди могли бы использовать для своих собственных проектов. Это модель хорошего C-программирования с использованием современных методов проектирования (включая абстракцию данных Liskov), показывающая, как организовать большой C-проект в виде набора полезных библиотек.
The C Puzzle Book - Алан Р. Фойер (1998)
Стандартная библиотека C - P.J. Plauger (1992). Он содержит полный исходный код для реализации стандартной библиотеки C89, а также подробное обсуждение дизайна и того, почему код разработан, как показано.
21-й век C: C Советы из Новой школы - Бен Клеменс (2012). В дополнение к языку C в книге описываются gdb, valgrind, autotools и git. Комментарии к стилю находятся в последней части (Глава 6 и далее).
Алгоритмы на C - Роберт Седжвик (1997). Дает вам реальное понимание реализации алгоритмов на C. Очень ясный и понятный; вероятно, вы захотите выбросить все остальные книги по алгоритмам и оставить эту.
Указатели на C - Кеннет Рик (1997).
Указатели на C - Навин Топпо и Хришикеш Деван (2013).
Решение проблем и разработка программ на языке Си (6-е издание) - Джери Р. Ханли и Эллиот Б. Коффман (2009).
Структуры данных - расширенный подход с использованием C - Джеффри Эсаков и Том Вайс (1989).
C Unleashed - Ричард Хитфилд, Лоуренс Кирби и др. (2000). Не идеально, но стоит программистам среднего уровня, практикующим задачи, написанные в этой книге. Это хороший подход к кулинарной книге, предложенный авторами comp.lang.c.
- Modern C - Йенс Гастедт (2017). Охватывает C на 5 уровнях (встреча, знакомство, познание, опыт, амбиции) от начала C до продвинутого C. Он охватывает потоки C11 и атомарный доступ, что делают немногие другие книги и не все компиляторы распознают во всех средах.
Эксперт
Эксперт C Программирование: глубокие секреты C - Питер ван дер Линден (1994). Много интересной информации и военных историй от команды компиляторов Sun, но немного устаревших местами.
Расширенное программирование на С на примере - Джон У. Перри (1998).
Расширенное программирование в среде UNIX - Ричард В. Стивенс и Стивен А. Раго (2013). Подробное описание того, как использовать API Unix из кода C, но не столько о механике программирования C.
Без
Essential C (бесплатный PDF) - Ник Парланте (2003). Обратите внимание, что это описывает язык C90 в нескольких точках (например, при обсуждении комментариев
//
и размещении объявлений переменных в произвольных точках в коде), поэтому к нему следует относиться с некоторой осторожностью.Вопросы и ответы по программированию на C: часто задаваемые вопросы - Steve Summit (1995). Это книга сайта, перечисленного ранее. Он не распространяется на C99 или более поздние стандарты.
C в двух словах - Питер Принц и Тони Кроуфорд (2005). Отличная книга, если вам нужна ссылка на C99.
Функциональный C - Питер Хартел и Хенк Мюллер (1997). Преподает современные практики, которые неоценимы для низкоуровневого программирования, с учетом параллелизма и модульности.
Практика программирования - Брайан В. Керниган и Роб Пайк (1999). Очень хорошая книга для сопровождения K & R. Он также использует C++ и Java.
C Ловушки и ловушки А. Кениг (1989). Очень хорошо, но стиль C предшествует стандарту C, что делает его менее рекомендуемым в наши дни.
Some have argued for the removal of 'Traps and Pitfalls' from this list because it has trapped some people into making mistakes; others continue to argue for its inclusion. Perhaps it should be regarded as an 'expert' book because it requires a moderately extensive knowledge of C to understand what changed since it was published.
Создайте свой собственный Lisp - Даниэль Холден (2014). Приятный способ выучить C.
MISRA-C - отраслевой стандарт, опубликованный и поддерживаемый Ассоциацией по надежности программного обеспечения для автомобильной промышленности. Крышки C89 и C99.
Although this isn't a book as such, many programmers recommend reading and implementing as much of it as possible. MISRA-C was originally intended as guidelines for safety-critical applications in particular, but it applies to any area of application where stable, bug-free C code is desired (who does not want fewer bugs?). MISRA-C is becoming the de facto standard in the whole embedded industry and is getting increasingly popular even in other programming branches. There are (at least) three publications of the standard (1998, 2004, and the current version from 2012). There is also a MISRA Compliance Guidelines document from 2016, and MISRA C:2012 Amendment 1 — Additional Security Guidelines for MISRA C:2012 (published in April 2016).
Note that some of the strictures in the MISRA rules are not appropriate to every context. For example, directive 4.12 states "Dynamic memory allocation shall not be used". This is appropriate in the embedded systems for which the MISRA rules are designed; it is not appropriate everywhere. (Compilers, for instance, generally use dynamic memory allocation for things like symbol tables, and to do without dynamic memory allocation would be difficult, if not preposterous.)Архивные списки рецензируемых ACCU книг по Beginner C (116 наименований) с 2007 года и Advanced C (76 наименований) с 2008 года. Большинство из них, похоже, не относятся к основной сайт, и вы все равно не сможете просмотреть его по теме.
Предупреждения
Остерегайтесь книг, написанных Гербертом Шильдтом. В частности, вам следует держаться подальше от C: Полная справка (4-е издание, 2000 г.), известной в некоторых кругах как C: Полная чепуха.
Также не используйте книгу Let Us C (издание 16 th, 2017) Яшванта Канеткара. Многие люди рассматривают ее как устаревшую книгу, которая учит Turbo C и содержит много устаревшего, вводящего в заблуждение и неправильного материала. Например, на странице 137 обсуждается ожидаемый результат от printf("%d %d %d\n", a, ++a, a++)
и не классифицируется как неопределенное поведение, как это должно быть.
Узнайте С трудный путь (2015) Зед Шоу. Книга со смешанными рецензиями. Критика этой книги Тима Хентенаара:
Подводя итог моим взглядам, изложенным ниже, автор представляет материал в очень упрощенном и вводящем в заблуждение виде, весь корпус представляет собой сложную путаницу, а некоторые из представленных им мнений и анализов просто ошибочны. Я пытался посмотреть на эту книгу глазами новичка, но, к сожалению, на меня оказывают влияние многолетний опыт написания кода на языке C. Для меня очевидно, что либо автор имеет ошибочное понимание языка C, либо он намеренно упрощает Точка, в которой он фактически вводит читателя в заблуждение (намеренно или нет).
"Learn C The Hard Way" - это не книга, которую я мог бы рекомендовать кому-то, кто одновременно учится программировать и изучает C. Если вы уже являетесь компетентным программистом на каком-либо другом родственном языке, то это интересная и необычная экспозиция С, хотя у меня есть оговорки по поводу частей книги. Джонатан Леффлер
Устаревшие
- Практическое программирование на С (3-е издание) - Стив Уоллин (1997) (новичок)
Другие участники, не обязательно отмеченные в истории изменений, включают:
Алекс Локвуд,
Бен Джексон,
Пузыри,
клешни,
coledot,
Дана Робинсон,
Даниэль Холден,
Дервин Танк,
DWC,
Эрчи Хоу,
Гарен,
haziz,
Йохан Безем,
Джонатан Леффлер,
Джошуа Партоги,
Лукас,
Лундин,
Мэтт К.,
mossplix,
Матье М.,
Midor,
Nietzche-Jou,
Норман Рэмси,
r3st0r3,
ridthyself,
Роберт С. Барнс,
Стив Саммит,
Тим Ринг,
Тони Бай,
VMAtm