확실한 C 도서 가이드 및 목록
이 질문 은 다양한 기술 수준을 대상 으로하는 c 프로그래밍 언어 에 대한 커뮤니티에서 관리하는 양질의 책 목록을 수집하려고 합니다.
C는 이동 중에 온라인 자습서를 읽어서 익히기 어려운 복잡한 프로그래밍 언어입니다. 포괄적 인 책은 종종 언어를 배우는 가장 좋은 방법이며 좋은 책을 찾는 것이 첫 번째 단계입니다. 잘못 쓰여진 책을 피하는 것이 중요하며 더 중요한 것은 심각한 기술적 오류가있는 책을 피하는 것입니다.
대략적인 기술 수준과 각 도서에 대한 간략한 설명 / 설명과 함께 양질의 도서를 추가하기 위해 허용 된 답변에 대한 수정을 제안하십시오. ( 질문이 잠겨 있으므로 새로운 답변이 허용되지 않습니다. 목록과 함께 단일 답변이 유지됩니다. )
책 선택, 품질, 제목, 요약, 기술 수준 및 잘못된 것으로 보이는 다른 모든 것에 대해 자유롭게 토론하십시오. 여기에있는 C 커뮤니티에서 만족스러워하는 책은 목록에 남아있을 것입니다. 나머지는 정기적으로 제거됩니다.
ACCU (Association of C and C ++ Users)의 리뷰가있는 책의 경우 해당 리뷰에 대한 링크를 책과 함께 추가해야합니다.
또한보십시오:
- c 태그 위키 의 기타 C 관련 리소스
- 유사한 C ++ 목록 : The Definitive C ++ Book Guide and List
이 질문은 2018 년 삭제 된 질문 감사의 일부로 Meta 에서 논의되었습니다 . 합의는 삭제되지 않은 상태로 유지하고 적극적으로 유지하는 것이 었습니다.
답변
경고 !
다양한 품질의 무작위 도서 목록입니다. 어떤 사람들의 관점에서 (어떤 정당성이 있음) 더 이상 추천 도서 목록이 아닙니다. 나열된 책 중 일부는 노골적으로 잘못된 진술을 포함하거나 잘못 / 유해한 관행을 가르칩니다. 그러한 책을 알고있는 사람들은이 답변을 수정하여 개선 할 수 있습니다. The C book list has been haywire를 참조하십시오 . 그것으로 무엇을할까요? , 또한 삭제 된 질문 감사 2018 .
참조 (모든 수준)
C 프로그래밍 언어 (2 판) -Brian W. Kernighan 및 Dennis M. Ritchie (1988). C의 발명가가 작성한 C (C99 또는 이후 버전이 아닌 C90)에 대한 훌륭하고 짧지 만 완전한 소개입니다. 그러나 언어가 변경되었고 지난 25 년 동안 좋은 C 스타일이 개발되었으며 다음과 같은 일부가 있습니다. 그 나이를 보여주는 책.
C : 참조 설명서 (5 판) -Samuel P. Harbison 및 Guy R. Steele (2002). C99까지 포함하여 C에 대한 훌륭한 참고서입니다. 튜토리얼이 아니며 초보자에게는 적합하지 않을 수 있습니다. C 용 컴파일러를 작성해야하는 경우 작성자가 시작했을 때해야했던 것처럼 훌륭합니다.
C Pocket Reference (O'Reilly) -Peter Prinz와 Ulla Kirch-Prinz (2002).
comp.lang.c FAQ -Steve Summit. C에 대한 많은 질문에 대한 답변을 제공하는 웹 사이트.
C 언어 표준의 다양한 버전은 여기 에서 찾을 수 있습니다 . C11 표준 초안 의 온라인 버전이 있습니다 .
새로운 C 표준-주석이 달린 참조 (무료 PDF)-Derek M. Jones (2009). 언급 된 "새로운 표준"은 C11이 아닌 이전 C99 표준입니다.
C99 표준의 근거 .
초보자
C 프로그래밍 : 현대적인 접근 방식 (2 판) -KN King (2008). 학습을위한 좋은 책 C.
C 프로그래밍 (4 판) -Stephen Kochan (2014). 좋은 일반 소개 및 튜토리얼.
C 프라이머 플러스 (5 판) -스티븐 프라 타 (2004)
C에 대한 책 -Al Kelley / Ira Pohl (1998).
The C Book (무료 온라인)-Mike Banahan, Declan Brady, Mark Doran (1991).
C : 프로그래밍 방법 (8 판) -Paul Deitel 및 Harvey M. Deitel (2015). 초보자를위한 많은 좋은 팁과 모범 사례. 이 지수는 매우 훌륭하고 적절한 참조 역할을합니다 (완전히 포괄적이지 않고 매우 얕은).
Head First C -David Griffiths와 Dawn Griffiths (2012).
Beginning C (5th Edition) -Ivor Horton (2013). 작지만 완전한 프로그램을 많이 사용하여 포인터에 대한 아주 좋은 설명.
Sams Teach Yourself C in 21 Days -Bradley L. Jones and Peter Aitken (2002). 아주 좋은 입문서입니다.
중급
Modern C — Jens Gustedt (2017 1st Edn, 2020 2nd Edn). 초급부터 고급 C까지 5 단계 (만남, 지인,인지, 경험, 야망)에서 C를 다룹니다. 다른 책에서는 거의 수행하지 않는 스레드 및 원자 적 접근을 포함하여 C11 및 C17을 다룹니다. 모든 컴파일러가 모든 환경에서 이러한 기능을 인식하는 것은 아닙니다.
C 인터페이스 및 구현 -David R. Hanson (1997). 일반적이고 재사용 가능한 방식으로 C에서 인터페이스와 구현 간의 경계를 정의하는 방법에 대한 정보를 제공합니다. 또한 목록, 집합, 예외, 문자열 조작, 메모리 할당 자 등과 같은 C의 공통 메커니즘 및 데이터 구조 구현에 적용하여이 원칙을 보여줍니다. 기본적으로 Hanson은 Icon 과 lcc 를 구축하는 과정에서 그가 작성한 모든 코드를 가져 와서 다른 사람들이 자신의 프로젝트에 재사용 할 수있는 형태로 최고의 비트를 추출했습니다. 현대적인 디자인 기술 (Liskov의 데이터 추상화 포함)을 사용하는 좋은 C 프로그래밍 모델로, 큰 C 프로젝트를 유용한 라이브러리 묶음으로 구성하는 방법을 보여줍니다.
C 퍼즐 북 -앨런 R. 포 이어 (1998)
표준 C 라이브러리 -PJ Plauger (1992). 여기에는 C89 표준 라이브러리 구현에 대한 전체 소스 코드와 함께 디자인 및 코드가 표시된대로 디자인 된 이유에 대한 광범위한 논의가 포함되어 있습니다.
21st Century C : C Tips from the New School -Ben Klemens (2012). 이 책은 C 언어 외에도 gdb, valgrind, autotools 및 git에 대해 설명합니다. 스타일에 대한 설명은 마지막 부분 (6 장 이상)에서 찾을 수 있습니다.
C의 알고리즘 -Robert Sedgewick (1997). C로 알고리즘을 구현하는 방법을 실제로 이해할 수 있습니다. 매우 명료하고 명확합니다. 다른 알고리즘 책을 모두 버리고이 책을 보관하고 싶을 것입니다.
- C의 포인터 -Kenneth Reek (1997).
C의 문제 해결 및 프로그램 설계 (6 판) -Jeri R. Hanly 및 Elliot B. Koffman (2009).
데이터 구조-C를 사용한 고급 접근 방식 -Jeffrey Esakov 및 Tom Weiss (1989).
C Unleashed -Richard Heathfield, Lawrence Kirby, et al. (2000). 이상적이지는 않지만 중급 프로그래머가이 책에 쓰여진 문제를 연습하는 것은 가치가 있습니다. 이것은 comp.lang.c 기여자들이 제안한 좋은 요리 책과 같은 접근 방식입니다.
- ANSI-C를 사용한 객체 지향 프로그래밍 (무료 PDF)-Axel-Tobias Schreiner (1993). 코드가 약간 복잡해집니다. C ++를 원하면 C ++를 사용하십시오. 물론 C90 만 사용합니다.
전문가
Expert C Programming : Deep C Secrets -Peter van der Linden (1994). Sun 컴파일러 팀에서 제공하는 흥미로운 정보와 전쟁 이야기가 많지만 장소에서는 약간 날짜가 있습니다.
예제에 의한 고급 C 프로그래밍 -John W. Perry (1998).
UNIX 환경의 고급 프로그래밍 -Richard W. Stevens 및 Stephen A. Rago (2013). C 코드에서 Unix API를 사용하는 방법에 대한 포괄적 인 설명이지만 C 코딩의 메커니즘에 대해서는 많이 설명하지 않습니다.
미분류
Essential C (무료 PDF)-Nick Parlante (2003). 이것은 여러 지점에서 C90 언어를 설명하므로 ( 예 :
//
코드의 임의 지점에서 주석 및 변수 선언 배치를 논의 할 때)주의해서 다루어야합니다.C 프로그래밍 FAQ : 자주 묻는 질문 -Steve Summit (1995). 이것은 이전에 나열된 웹 사이트의 책입니다. C99 이상 표준은 다루지 않습니다.
C in a Nutshell -Peter Prinz와 Tony Crawford (2005). C99에 대한 참조가 필요한 경우 훌륭한 책.
기능성 C -Pieter Hartel 및 Henk Muller (1997). 동시성 및 모듈성을 염두에두고 저수준 프로그래밍에 매우 유용한 최신 관행을 가르칩니다.
프로그래밍 실습 -Brian W. Kernighan 및 Rob Pike (1999). K & R에 동행하기에 아주 좋은 책입니다. C ++ 및 Java도 사용합니다.
A. Koenig (1989)의 C 트랩 및 함정 . 매우 좋지만 C 스타일은 표준 C보다 이전이므로 요즘에는 덜 권장됩니다.
어떤 사람들은이 목록에서 '함정과 함정'을 제거해야한다고 주장했습니다. 그 이유는 어떤 사람들이 실수를하게 만들었 기 때문입니다. 다른 사람들은 그것의 포함에 대해 계속 논쟁합니다. 출판 된 이후 변경된 내용을 이해하려면 C에 대한 적당히 광범위한 지식이 필요하기 때문에 '전문가'책으로 간주되어야 할 것입니다.
MISRA-C- Motor Industry Software Reliability Association에서 게시 및 유지 관리하는 산업 표준입니다. C89 및 C99를 다룹니다.
이 책은 책이 아니지만 많은 프로그래머는 가능한 한 많이 읽고 구현할 것을 권장합니다. MISRA-C는 원래 특히 안전이 중요한 애플리케이션에 대한 지침으로 의도되었지만 안정적이고 버그가없는 C 코드가 필요한 모든 애플리케이션 영역에 적용됩니다 (버그를 적게 원하지 않는 사람은 누구입니까?). MISRA-C는 전체 임베디드 산업에서 사실상의 표준이되고 있으며 다른 프로그래밍 분야에서도 점점 인기를 얻고 있습니다. (적어도) 세 개의 표준 간행물이 있습니다 (1998, 2004 및 2012의 현재 버전). 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 검토 도서 목록을 보관 했습니다. 대부분은 더 이상 메인 사이트에없는 것처럼 보이며 주제별로 검색 할 수 없습니다. 어쨌든.
경고
ISO 9899 Wiki 에는주의해야 할 책과 자습서 목록이 있습니다.이 목록은 그 자체가 ISO 또는 C 표준과 공식적으로 연관되어 있지는 않지만 C 표준에 대한 정보를 포함합니다 (ISO 9899 : 2011 및 ISO 9899 : 2018 릴리스에 대해서는 언급하지 않음).
Herbert Schildt가 쓴 책을 조심하십시오 . 특히 일부 서클에서는 C : The Complete Nonsense로 알려진 C : The Complete Reference (4th Edition, 2000) 에서 멀리 떨어져 있어야합니다 .
또한 책을 사용하지 않는 하자 우리 C (16 일 Yashwant Kanetkar에 의해 판, 2017). 많은 사람들은이 책을 Turbo C를 가르치는 구식 책으로 여기며 구식, 오해의 소지가있는 잘못된 자료가 많이 있습니다. 예를 들어, 137 페이지는 예상되는 출력에 대해 설명 printf("%d %d %d\n", a, ++a, a++)
하며 정의되지 않은 동작 으로 분류하지 않습니다 . 또한 gets
, %[\n]s
in scanf
, getchar
유형의 변수에의 반환 값 저장 char
또는 fflush
on 사용과 같은 이식 불가능하고 버그가 많은 코딩 관행을 지속적으로 장려 합니다 stdin
.
Zed Shaw의 C The Hard Way (2015)를 배우십시오 . 여러 리뷰가있는 책. Tim Hentenaar 의이 책 에 대한 비평 :
아래에 제시된 내 견해를 요약하면 저자는 자료를 지나치게 단순화하고 오해의 소지가있는 방식으로 제시하고 전체 말뭉치가 엉망이며 그가 제공하는 의견과 분석 중 일부는 명백히 잘못되었습니다. 나는이 책을 초보자의 눈으로 보려고했지만, 불행히도 C로 코드를 작성한 수년간의 경험에 편향되어 있습니다. 저자가 C에 대해 잘못 이해했거나 의도적으로 지나치게 단순화 한 것이 분명합니다. 그가 실제로 독자를 오도하는 지점 (의도적이든 아니든).
"Learn C The Hard Way"는 프로그래밍을 배우고 C를 배우는 사람에게 추천 할 수있는 책이 아닙니다. 이미 다른 관련 언어에 능숙한 프로그래머라면 흥미롭고 특이한 설명이 될 것입니다. C, 책의 일부에 대한 예약이 있지만. 조나단 레플러
시대에 뒤쳐진
- 실용적인 C 프로그래밍 (3 판) -Steve Oualline (1997) (초급)
다른 참여자 반드시 개정 이력에 적립되지는 다음과 같습니다 :
알렉스 록우드 , 벤 잭슨 , 거품 , 발톱 , coledot , 다나 로빈슨 , 다니엘 홀든 , Dervin은 썽크 , DWC , Erci 허우 , Garen , haziz , 요한 Bezem , 조나단 레플러 , 여호수아 Partogi , 루카스 , 룬딘 , 매트 K. , mossplix , 마티유 M. , midor , Nietzche - 저우 , 노먼 램지 , r3st0r3 , ridthyself , 로버트 S. 반즈 , 스티브 정상 회의 , 팀 링 , 토니 바이 , VMAtm