Hướng dẫn và danh sách sách C dứt khoát


400

Câu hỏi này cố gắng thu thập danh sách các cuốn sách chất lượng được cộng đồng duy trì trên ngôn ngữ lập trình, nhắm vào các cấp độ kỹ năng khác nhau.

C là một ngôn ngữ lập trình phức tạp, khó tiếp thu khi đang di chuyển bằng cách đọc các hướng dẫn trực tuyến. Một cuốn sách toàn diện thường là cách tốt nhất để học ngôn ngữ, và tìm một cuốn sách hay là bước đầu tiên. Điều quan trọng là phải tránh những cuốn sách được viết xấu, và thậm chí quan trọng hơn, những cuốn sách có lỗi kỹ thuật nghiêm trọng.

Vui lòng đề xuất các chỉnh sửa cho câu trả lời được chấp nhận để thêm sách chất lượng, với mức độ kỹ năng gần đúng và một đoạn giới thiệu / mô tả ngắn về mỗi cuốn sách. ( Lưu ý rằng câu hỏi đã bị khóa, vì vậy sẽ không có câu trả lời mới nào được chấp nhận. Một câu trả lời duy nhất đang được duy trì với danh sách )

Hãy tranh luận về lựa chọn sách, chất lượng, tiêu đề, tóm tắt, cấp độ kỹ năng và bất cứ điều gì khác mà bạn thấy là sai. Những cuốn sách được cộng đồng C coi là đạt yêu cầu ở đây sẽ nằm trong danh sách; phần còn lại sẽ được loại bỏ thường xuyên.

Đối với những cuốn sách có đánh giá của Hiệp hội người dùng C và C ++ (ACCU), nên thêm một liên kết đến những đánh giá đó cùng với cuốn sách.

Xem thêm:


Câu hỏi này đã được thảo luận trên Meta như một phần của Kiểm toán câu hỏi đã xóa 2018 .
Sự đồng thuận là giữ cho nó không bị hủy hoại và duy trì tích cực.


31
Không coi thường câu hỏi, điều này tốt, nhưng ... hầu hết mọi người phải mất nhiều năm để thành thạo K & R. Có nhiều thứ trong đó hơn bạn nghĩ. Độ mỏng của cuốn sách là lừa dối.
dmckee --- ex-moderator mèo con

4
Nếu bạn chưa quen với C, hãy nhớ rằng C hiện đại là ANSI C và bất cứ điều gì có trước tiêu chuẩn đó (1989) có thể sẽ lỗi thời. Chụp cho giữa những năm 90 hoặc sau đó.
Dana Robinson

7
@Dhaivat Tôi nghĩ là không, hãy cẩn thận để nhảy vào bandwagon K & R. K & R không đề cập đến thiết kế chương trình tốt cũng như thực hành lập trình tốt, chủ yếu là do nó được viết trước khi có ai biết thực hành lập trình tốt là gì. Nó không đề cập đến phần nào của ngôn ngữ C là thừa hoặc thậm chí nguy hiểm. Cuốn sách được liệt kê chính xác như một hướng dẫn tham khảo, nó không nên được sử dụng cho việc dạy / học lập trình hiện đại.
Lundin

Tôi đồng ý với Dana rằng không có gì được viết trước các tiêu chuẩn ANSI / ISO trong 89/90 sẽ xuất hiện trong danh sách như thế này. Bạn cũng có thể xem xét việc nêu những cuốn sách đề cập đến C99 và những cuốn sách nào không.
Lundin

Câu trả lời:


492

Cảnh báo

Đây là một danh sách các cuốn sách ngẫu nhiên có chất lượng đa dạng. Theo quan điểm của một số người (với một số biện minh), nó không còn là một danh sách các cuốn sách được đề xuất. Một số sách được liệt kê có chứa tuyên bố không chính xác hoặc dạy các hành vi sai / có hại. Những người nhận thức được những cuốn sách như vậy có thể chỉnh sửa câu trả lời này để giúp cải thiện nó. Xem danh sách sách C đã đi haywire. Phải làm gì với nó? , và cũng đã xóa kiểm toán câu hỏi 2018 .

Tham khảo (Tất cả các cấp)


Người bắt đầu

Trung gian

  • Modern C - Jens Gustyt (2017 1st Edn; 2020 2nd Edn). Bao gồm C ở 5 cấp độ (gặp gỡ, làm quen, nhận thức, kinh nghiệm, tham vọng) từ đầu C đến nâng cao C. Nó bao gồm C11 và C17, bao gồm các chủ đề và truy cập nguyên tử, điều mà ít cuốn sách khác làm được. Không phải tất cả các trình biên dịch nhận ra các tính năng này trong tất cả các môi trường.

  • C Giao diện và triển khai - David R. Hanson (1997). Cung cấp thông tin về cách xác định ranh giới giữa giao diện và triển khai trong C theo cách chung và có thể sử dụng lại. Nó cũng thể hiện nguyên tắc này bằng cách áp dụng nó vào việc thực hiện các cơ chế và cấu trúc dữ liệu phổ biến trong C, chẳng hạn như danh sách, bộ, ngoại lệ, thao tác chuỗi, cấp phát bộ nhớ, v.v. Về cơ bản, Hanson đã lấy tất cả mã mà anh ta đã viết như một phần của việc xây dựng Biểu tượnglcc và rút ra các bit tốt nhất ở dạng mà người khác có thể sử dụng lại cho các dự án của riêng họ. Đó là mô hình lập trình C tốt bằng các kỹ thuật thiết kế hiện đại (bao gồm trừu tượng hóa dữ liệu của Liskov), cho thấy cách tổ chức một dự án C lớn như một loạt các thư viện hữu ích.

  • Cuốn sách giải đố C - Alan R. Feuer (1998)

  • Thư viện C tiêu chuẩn - PJ Plauger (1992). Nó chứa mã nguồn hoàn chỉnh để triển khai thư viện chuẩn C89, cùng với thảo luận rộng rãi về thiết kế và lý do mã được thiết kế như được hiển thị.

  • Thế kỷ 21 C: C Lời khuyên từ trường học mới - Ben Klemens (2012). Ngoài ngôn ngữ C, cuốn sách giải thích gdb, valgrind, autotools và git. Các ý kiến ​​về phong cách được tìm thấy trong phần cuối (Chương 6 và hơn thế nữa).

  • Các thuật toán trong C - Robert Sedgewick (1997). Cung cấp cho bạn một nắm bắt thực sự về việc thực hiện các thuật toán trong C. Rất sáng suốt và rõ ràng; có lẽ sẽ khiến bạn muốn vứt bỏ tất cả những cuốn sách thuật toán khác của bạn và giữ cuốn sách này.

  • Con trỏ trên C - Kenneth Reek (1997).

  • Con trỏ trong C - Naveen Toppo và Hrishikesh Dewan (2013).

  • Giải quyết vấn đề và thiết kế chương trình trong C (Ấn bản thứ 6) - Jeri R. Hanly và Elliot B. Koffman (2009).

  • Cấu trúc dữ liệu - Cách tiếp cận nâng cao sử dụng C - Jeffrey Esakov và Tom Weiss (1989).

  • C Giải phóng - Richard Heathfield, Lawrence Kirby, et al. (2000). Không lý tưởng, nhưng nó là giá trị lập trình viên trung gian thực hành các vấn đề được viết trong cuốn sách này. Đây là một cách tiếp cận giống như sách dạy nấu ăn được đề xuất bởi những người đóng góp comp.lang.c.

Chuyên gia


Chưa phân loại

  • Essential C (PDF miễn phí) - Nick Parlante (2003). Lưu ý rằng điều này mô tả ngôn ngữ C90 tại một số điểm ( ví dụ: khi thảo luận về //ý kiến ​​và vị trí khai báo biến tại các điểm tùy ý trong mã), vì vậy cần thận trọng khi xử lý.

  • Câu hỏi thường gặp về lập trình C: Câu hỏi thường gặp - Steve Summit (1995). Đây là cuốn sách của trang web được liệt kê trước đó. Nó không bao gồm C99 hoặc các tiêu chuẩn sau này.

  • C in a Nutshell - Peter Prinz và Tony Crawford (2005). Cuốn sách tuyệt vời nếu bạn cần một tài liệu tham khảo cho C99.

  • Chức năng C - Pieter Hartel và Henk Muller (1997). Dạy các thực hành hiện đại có giá trị cho lập trình cấp thấp, với sự đồng thời và mô đun hóa trong tâm trí.

  • Thực hành lập trình - Brian W. Kernighan và Rob Pike (1999). Một cuốn sách rất hay đi cùng K & R. Nó cũng sử dụng C ++ và Java.

  • C Bẫy và cạm bẫy của A. Koenig (1989). Rất tốt, nhưng kiểu C trước ngày chuẩn C, khiến cho nó ít được khuyên dùng trong những ngày này.

    Một số người đã lập luận cho việc loại bỏ 'Bẫy và cạm bẫy' khỏi danh sách này vì nó đã khiến một số người mắc bẫy mắc lỗi; những người khác tiếp tục tranh luận cho sự bao gồm của nó. Có lẽ nó nên được coi là một cuốn sách 'chuyên gia' bởi vì nó đòi hỏi kiến ​​thức sâu rộng vừa phải về C để hiểu những gì đã thay đổi kể từ khi nó được xuất bản.

  • Xây dựng Lisp của riêng bạn - Daniel Holden (2014). Một cách thú vị để học C.

  • MISRA-C - tiêu chuẩn công nghiệp được công bố và duy trì bởi Hiệp hội độ tin cậy phần mềm công nghiệp ô tô. Bao gồm C89 và C99.

    Mặc dù đây không phải là một cuốn sách như vậy, nhưng nhiều lập trình viên khuyên bạn nên đọc và thực hiện càng nhiều càng tốt. MISRA-C ban đầu được dự định là hướng dẫn cho các ứng dụng quan trọng về an toàn, nhưng nó áp dụng cho bất kỳ lĩnh vực ứng dụng nào có mã C ổn định, không có lỗi (ai không muốn ít lỗi hơn?). MISRA-C đang trở thành tiêu chuẩn thực tế trong toàn bộ ngành công nghiệp nhúng và ngày càng trở nên phổ biến ngay cả trong các ngành lập trình khác. Có (ít nhất) ba ấn phẩm của tiêu chuẩn (1998, 2004 và phiên bản hiện tại từ 2012). Ngoài ra còn có tài liệu Hướng dẫn tuân thủ MISRA từ năm 2016 và MISRA C: 2012 Sửa đổi 1 - Nguyên tắc bảo mật bổ sung cho MISRA C: 2012 (xuất bản vào tháng 4 năm 2016).
    Lưu ý rằng một số hạn chế trong các quy tắc MISRA không phù hợp với mọi bối cảnh. Ví dụ, chỉ thị 4.12 nêu rõ "Không được sử dụng cấp phát bộ nhớ động". Điều này phù hợp trong các hệ thống nhúng mà quy tắc MISRA được thiết kế; nó không thích hợp ở mọi nơi (Ví dụ, trình biên dịch thường sử dụng cấp phát bộ nhớ động cho những thứ như bảng biểu tượng và để thực hiện mà không cấp phát bộ nhớ động sẽ rất khó, nếu không phải là vô lý.)

  • Lưu trữ danh sách các cuốn sách được ACCU đánh giá về Người mới bắt đầu C (116 đầu sách) từ năm 2007 và Nâng cao C (76 đầu sách) từ năm 2008. Hầu hết các sách này không còn xuất hiện trên trang web chính nữa và bạn không thể duyệt theo chủ đề đó dù sao.


Cảnh báo

Hãy cảnh giác với những cuốn sách được viết bởi Herbert Schildt . Cụ thể, bạn nên tránh xa C: The Complete Reference (4th Edition, 2000), được biết đến trong một số vòng tròn là C: The Complete Nonsense.

Cũng không sử dụng cuốn sách Let Us C ( Phiên bản thứ 16 , 2017) của Yashwant Kanetkar. Nhiều người xem nó như một cuốn sách lỗi thời dạy Turbo C và có nhiều tài liệu lỗi thời, sai lệch và không chính xác. Ví dụ, trang 137 thảo luận về đầu ra dự kiến ​​từ printf("%d %d %d\n", a, ++a, a++)và không phân loại nó là hành vi không xác định như bình thường.

Tìm hiểu C The Hard Way (2015) của Zed Shaw. Một cuốn sách với nhiều ý kiến ​​trái chiều. Một bài phê bình về cuốn sách này của Tim Hentenaar:

Để tóm tắt quan điểm của tôi, được trình bày dưới đây, tác giả trình bày tài liệu theo cách rất đơn giản và sai lệch, toàn bộ văn bản là một mớ hỗn độn, và một số ý kiến ​​và phân tích mà ông đưa ra hoàn toàn sai. Tôi đã cố gắng xem cuốn sách này qua con mắt của một người mới, nhưng thật không may, tôi bị thiên vị bởi nhiều năm kinh nghiệm viết mã ở C. Rõ ràng với tôi rằng tác giả có một sự hiểu biết thiếu sót về C, hoặc anh ta cố tình quá mức đối với điểm mà anh ấy thực sự đánh lừa người đọc (cố ý hay cách khác.)

"Learn C The Hard Way" không phải là cuốn sách mà tôi có thể giới thiệu cho người vừa học lập trình vừa học C. Nếu bạn đã là một lập trình viên có năng lực trong một số ngôn ngữ liên quan khác, thì nó đại diện cho một giải thích thú vị và khác thường trên C, mặc dù tôi có đặt phòng về các phần của cuốn sách. Jonathan Leffler


Lỗi thời


Người đóng góp khác , không nhất thiết phải ghi vào lịch sử sửa đổi, bao gồm:
Alex Lockwood , Ben Jackson , Bubbles , móng vuốt , coledot , Dana Robinson , Daniel Holden , Dervin thunk , DWC , Erci Hou , Garen , haziz , Johan Bezem , Jonathan Leffler , Joshua 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 Nội dung không phù hợp nên được giải quyết bằng cách gắn cờ bài đăng. "Hai lần bấm chuột" là một tuyên bố ngớ ngẩn, vì vậy cờ của bạn có thể sẽ bị từ chối. Và bất kỳ cuộc tranh luận nào về việc cờ được đề cập có gây khó chịu hay không cũng không nên ở đây. Thay vào đó, hãy đăng những mối quan tâm như vậy tại meta.stackoverflow.com .
Lundin

1
Điều gì là ngớ ngẩn về "hai lần nhấp chuột"?
Pablo Barría Urenda

3
Như năm 2019, tôi thấy cuốn sách <Modern C>rất đáng đọc, nó sử dụng cú pháp c99 & c11 rất nhiều, rất nhỏ gọn & được viết tốt. Và bạn biết những gì? Nó miễn phí !!! Bạn có thể tải xuống phiên bản mới nhất dưới dạng pdf tại đây: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (BTW, có vẻ như tác giả đang cập nhật và xuất bản sách ở liên kết trên khi cần)
Eric Wang

1
Tôi chuẩn bị thêm một cuốn sách chỉ để nhận ra nó đã được chỉnh sửa là không được khuyến khích. Có thể để lại những gì có thể nhìn thấy trong bài viết trích dẫn lý do tại sao nó nên được tránh. Thậm chí có thể là một phần riêng biệt của những cuốn sách KHÔNG được đề xuất?
gst

3
Tôi đã cố gắng không thành công để chỉnh sửa câu trả lời (rõ ràng là do định dạng không chính xác, nó bật ra ngay cả trước khi tôi thực hiện chỉnh sửa). Dù sao, ít nhất hai cuốn sách được đề xuất được liệt kê là "cần tránh" ở đây: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Vui lòng xóa "Xây dựng Lisp của riêng bạn" và "Tìm hiểu C một cách khó khăn" và thêm liên kết ở trên vào phần Cảnh báo .
gst
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.