결정적인 C 책 가이드 및 목록


400

이 질문은 커뮤니티에서 관리하는 양질의 도서 목록을 다양한 기술 수준을 목표로 프로그래밍 언어.

C는 온라인 자습서를 읽음으로써 이동이 어려운 복잡한 프로그래밍 언어입니다. 포괄적 인 책은 종종 언어를 배우는 가장 좋은 방법이며, 좋은 책을 찾는 것이 첫 번째 단계입니다. 잘못 작성된 서적, 그리고 더 중요한 것은 심각한 기술적 오류가있는 서적을 피하는 것이 중요합니다.

대략적인 기술 수준과 각 책에 대한 간략한 설명과 함께 양질의 책을 추가하려면 허용 된 답변의 수정 사항을 제안하십시오. ( 질문은 잠겨 있으므로 새 답변은 수락되지 않습니다. 단일 답변은 목록과 함께 유지됩니다 )

책 선택, 질, 제목, 요약, 기술 수준 및 기타 잘못된 점에 대해 자유롭게 토론하십시오. C 커뮤니티가 만족스럽게 여기는 책은 목록에 남을 것입니다. 나머지는 정기적으로 제거됩니다.

CCU 및 C ++ 사용자 협회 (ACCU)의 리뷰가있는 책의 경우, 해당 검토에 대한 링크가 책과 함께 추가되어야합니다.

또한보십시오:


이 질문은 2018 년 삭제 된 질문 감사의 일부로 메타 에 대해 논의되었습니다 . 합의는 삭제되지 않고 적극적으로 유지되는 것이 었습니다.


31
좋은 질문이지만, 대부분의 사람들은 K & R을 마스터하는 데 몇 년이 걸립니다. 당신이 생각하는 것보다 더 많은 것이 있습니다. 책의 얇음은 기만적입니다.
dmckee --- 전 운영자 고양이

4
C를 처음 사용하는 경우 최신 C는 ANSI C이며 해당 표준 (1989)보다 오래된 것은 오래되었을 수 있습니다. 90 년대 중반 이후에 촬영하십시오.
다나 로빈슨

7
@Dhaivat 나는 K & R 밴드 왜건을 뛰어 넘지 않도록 조심해야한다고 생각합니다. K & R은 좋은 프로그램 설계 나 좋은 프로그래밍 실습을 다루지 않습니다. 주로 누군가가 좋은 프로그래밍 실습이 무엇인지 알기 전에 작성 되었기 때문입니다. C 언어의 어떤 부분이 불필요한 지 또는 위험한지는 언급하지 않습니다. 이 책은 참조 매뉴얼로 올바르게 나열되어 있으며, 현대 프로그래밍을 가르치거나 배우는 데 사용해서는 안됩니다.
룬딘

Dana는 89/90의 ANSI / ISO 표준화 이전에 작성된 내용이 이와 같은 목록에 표시되지 않는다는 데 동의합니다. C99를 다루는 책과 그렇지 않은 책을 언급 할 수도 있습니다.
룬딘

답변:


492

경고

이것은 다양한 품질의 무작위 도서 목록입니다. 일부 사람들의 견해 (일부 타당 함)는 더 이상 권장 도서 목록이 아닙니다. 열거 된 책들 중 일부는 엄청나게 부정확 한 진술을 포함하거나 잘못되거나 유해한 관행을 가르치고 있습니다. 그러한 책을 알고있는 사람들은이 답변을 편집하여 개선 할 수 있습니다. C 책 목록이 사라졌습니다.를 참조하십시오 . 그것으로 무엇을해야합니까? , 또한 삭제 된 질문 감사 2018 .

참조 (모든 레벨)


초보자

중급

  • 현대 C — Jens Gustedt (2017 1st Edn; 2020 2nd Edn). C부터 초급 C까지 5 단계 (만남, 지인,인지, 경험, 야망)의 C를 다룹니다. 스레드와 원자 적 접근을 포함하여 C11과 C17을 다루며 다른 책은 거의 없습니다. 모든 컴파일러가 모든 환경에서 이러한 기능을 인식하는 것은 아닙니다.

  • C 인터페이스와 구현 -David R. Hanson (1997). C에서 인터페이스와 구현 간의 경계를 일반적이고 재사용 가능한 방식으로 정의하는 방법에 대한 정보를 제공합니다. 또한 목록, 집합, 예외, 문자열 조작, 메모리 할당 자 등과 같은 일반적인 메커니즘과 C의 데이터 구조 구현에 적용하여이 원칙을 보여줍니다. 기본적으로 Hanson은 Iconlcc 작성의 일부로 작성한 모든 코드를 가져 와서 다른 사람들이 자신의 프로젝트에 재사용 할 수있는 형태로 최고의 비트를 가져 왔습니다. 현대적인 디자인 기술 (Liskov의 데이터 추상화 포함)을 사용하여 유용한 C 프로그래밍 모델로, 큰 C 프로젝트를 유용한 라이브러리로 구성하는 방법을 보여줍니다.

  • C 퍼즐 북 -앨런 R. 파이어 (1998)

  • 표준 C 라이브러리 -PJ Plauger (1992). 여기에는 C89 표준 라이브러리 구현에 대한 완전한 소스 코드와 함께 디자인에 대한 광범위한 토론과 코드가 표시된대로 디자인 된 이유가 포함되어 있습니다.

  • 21 세기 C : 새로운 학교의 C 팁 -Ben Klemens (2012). 이 책은 C 언어 외에도 gdb, valgrind, autotools 및 git에 대해 설명합니다. 스타일에 대한 주석은 마지막 부분 (6 장 이상)에 있습니다.

  • C의 알고리즘 -Robert Sedgewick (1997). C로 알고리즘을 구현할 수있는 실질적인 지식을 제공합니다. 매우 명확하고 명확합니다. 아마도 다른 모든 알고리즘 책을 버리고 이것을 유지하고 싶을 것입니다.

  • C- 케네스 렉 (1997) 에 대한 포인터 .

  • C -Naveen Toppo와 Hrishikesh Dewan의 포인터 (2013).

  • C (6 판)의 문제 해결 및 프로그램 설계 -Jeri R. Hanly 및 Elliot B. Koffman (2009).

  • 데이터 구조-C를 사용한 고급 접근법 -Jeffrey Esakov 및 Tom Weiss (1989).

  • C Unleashed -Richard Heathfield, Lawrence Kirby 등 (2000). 이상적이지는 않지만이 책에 쓰여진 문제를 연습하는 중급 프로그래머에게는 가치가 있습니다. 이것은 comp.lang.c 기고자들이 제안한 훌륭한 요리 책과 같은 접근 방식입니다.

전문가


분류되지 않은

  • 필수 C (무료 PDF)-Nick Parlante (2003). 여기에서는 여러 지점에서 C90 언어를 설명하므로 ( 예 :// 코드의 임의 지점에서 주석 및 변수 선언 배치 에 대해 논의 할 때)주의해서 다루어야합니다.

  • C 프로그래밍 FAQ : 질문과 대답 -Steve Summit (1995). 이 책은 앞에서 설명한 웹 사이트의 책입니다. C99 이상 표준에는 적용되지 않습니다.

  • 간단히 말해서 C -Peter Prinz와 Tony Crawford (2005). C99에 대한 참조가 필요한 경우 훌륭한 책입니다.

  • 기능성 C- 피터 하텔 (Pieter Hartel)과 k 뮬러 (Henk Muller) (1997). 동시성 및 모듈성을 염두에두고 저수준 프로그래밍에 없어서는 안될 최신 관행을 교육합니다.

  • 프로그래밍 실습 -Brian W. Kernighan 및 Rob Pike (1999). K & R과 함께하는 아주 좋은 책. C ++과 Java도 사용합니다.

  • A. Koenig (1989)의 C 함정과 함정 . 매우 좋지만 C 스타일은 표준 C보다 이전 버전이므로 요즘에는 권장하지 않습니다.

    일부 사람들은이 목록에서 '트랩과 함정'을 제거한다고 주장했습니다. 다른 사람들은 그 내용을 계속 주장하고있다. 아마도 출판 된 이후 변경된 내용을 이해하려면 C에 대한 지식이 어느 정도 필요하기 때문에 '전문가'책으로 간주해야 할 것입니다.

  • 자신 만의 리스프 만들기 — Daniel Holden (2014). C를 배우는 즐거운 방법

  • MISRA-C- 자동차 산업 소프트웨어 신뢰성 협회에서 발행하고 유지하는 업계 표준. C89와 C99를 다룹니다.

    이 책은 그렇게 책이 아니지만 많은 프로그래머가 가능한 한 많은 책을 읽고 구현할 것을 권장합니다. MISRA-C는 원래 특히 안전에 중요한 응용 프로그램을위한 지침으로 고안되었지만, 버그가없는 안정적이고 버그가없는 C 코드가 필요한 모든 응용 분야에 적용됩니다 (누가 버그를 원하지 않습니까?). MISRA-C는 전체 임베디드 산업에서 사실상의 표준이되고 있으며 다른 프로그래밍 분야에서도 점점 더 대중화되고 있습니다. 표준 (1998 년, 2004 년 및 2012 년의 현재 버전)에는 최소한 3 개의 간행물이 있습니다. 2016 년의 MISRA 준수 지침 문서와 MISRA C : 2012 개정 1-MISRA C : 2012에 대한 추가 보안 지침 (2016 년 4 월에 게시)도 있습니다.
    MISRA 규칙의 일부 제한 사항은 모든 상황에 적합한 것은 아닙니다. 예를 들어, 지시문 4.12에는 "동적 메모리 할당을 사용해서는 안됩니다"라고 명시되어 있습니다. 이것은 MISRA 규칙이 설계된 내장 시스템에 적합합니다. 모든 곳에서 적합하지 않습니다. 예를 들어, 컴파일러는 일반적으로 심볼 테이블과 같은 것들에 동적 메모리 할당을 사용하며, 동적 메모리 할당없이 수행하는 것은 어리석지 않은 경우 어렵습니다.

  • 2007 년 의 Beginner 's C (116 권) 및 2008 년의 Advanced C (76 권) 에 대한 ACCU 검토 도서의 보관 된 목록입니다 .이 중 대부분은 더 이상 기본 사이트에있는 것으로 보이지 않으므로 주제별로 찾아 볼 수 없습니다. 어쨌든.


경고

Herbert Schildt가 쓴 책에주의하십시오 . 특히 C : The Complete Nonsense라고하는 일부 서클에서는 C : The Complete Reference (2000 년 4 판) 에서 멀리 떨어져 있어야합니다 .

또한 책을 사용하지 않는 하자 우리 C (16 Yashwant Kanetkar에 의해 판, 2017). 많은 사람들이이 책을 터보 C를 가르치는 구식 책으로보고, 쓸모없고 오해의 소지가 있으며 잘못된 자료가 많이 있습니다. 예를 들어, 137 페이지는 예상되는 출력에 대해 설명하고 정의되지 않은 동작 으로 printf("%d %d %d\n", a, ++a, a++)분류하지 않습니다 .

Zed Shaw의 C The Hard Way (2015)를 배우십시오 . 리뷰가 혼합 된 책. Tim Hentenaar 의이 책대한 비평 :

아래에 제시된 나의 견해를 요약하기 위해, 저자는 자료를 크게 단순화되고 오도하는 방식으로 제시하고, 전체 말뭉치가 번들 엉망이며, 그가 제안하는 의견과 분석 중 일부는 명백히 잘못되었습니다. 나는 초보자의 눈을 통해이 책을 보려고 노력했지만, 불행히도 나는 C로 코드를 작성해온 경험에 편향되어있다. 저자가 C에 대한 결함에 대한 이해가 있거나 의도적으로 과도하게 단순화하고 있다는 것은 분명하다 그가 의도적으로 또는 다른 방식으로 독자를 실제로 오도하는 곳을 지적하십시오.

"Learn C The Hard Way"는 C를 프로그래밍하고 배우는 법을 배우는 사람에게 추천 할 수있는 책이 아닙니다. 이미 다른 관련 언어로 유능한 프로그래머라면 흥미롭고 특이한 설명을 할 수 있습니다. C, 책의 일부에 대한 예약이 있지만. 조나단 레 플리 어


시대에 뒤쳐진


다른 참여자 반드시 개정 이력에 적립되지는 다음과 같습니다 :
알렉스 록우드 , 벤 잭슨 , 거품 , 발톱 , coledot , 다나 로빈슨 , 다니엘 홀든 , Dervin은 썽크 , DWC , Erci 허우 , Garen , haziz , 요한 Bezem , 조나단 레플러 , 여호수아 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 부적절한 콘텐츠는 게시물을 신고하여 해결해야합니다. "두 번의 클릭"은 어리석은 말이므로 플래그가 거부 될 수 있습니다. 언급 된 깃발이 불쾌한 지 아닌지에 대한 논쟁도 여기에 있지 않아야합니다. 대신 meta.stackoverflow.com에 이러한 우려 사항을 게시하십시오 .
Lundin 2019

1
"두 번의 클릭만으로"어리석은 것은 무엇입니까?
Pablo Barría Urenda

3
2019 년으로 책을 <Modern C>읽을 가치가 있다는 것을 알았습니다 . 많은 c99 및 c11 구문을 사용하고 매우 작고 잘 작성되었습니다. 그리고 당신은 무엇을 알고 있습니까? 무료입니다 !!! icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf 에서 최신 버전을 pdf로 다운로드 할 수 있습니다 (BTW, 저자는 필요에 따라 위 링크에서 책을 업데이트하고 게시하는 것 같습니다)
Eric Wang

1
책이 권장되지 않은 상태로 편집되었다는 것을 깨닫기 위해 책을 추가하려고했습니다. 피해야하는 이유를 언급하여 게시물에 해당 내용을 표시 할 수 있습니다. 권장되지 않은 책의 별도 섹션 일 수도 있습니까?
gst

3
답변을 편집하지 못했습니다 (잘못된 형식으로 인해 수정조차하기 전에 튀어 나온 것 같습니다). 어쨌든 적어도 두 개의 권장 책은 "피해야 할 것"으로 표시됩니다 : iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . "자신의 Lisp 구축"및 "어려운 방법으로 C 배우기"를 제거하고 위의 링크를 경고 섹션에 추가 하십시오.
gst
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.