คู่มือและรายการหนังสือซีแบบเด็ดขาด


400

คำถามนี้พยายามรวบรวมรายการหนังสือคุณภาพที่ชุมชนเป็นผู้ดูแล ภาษาการเขียนโปรแกรมกำหนดเป้าหมายในระดับทักษะต่างๆ

C เป็นภาษาการเขียนโปรแกรมที่ซับซ้อนซึ่งยากต่อการรับขณะเดินทางโดยการอ่านบทช่วยสอนออนไลน์ หนังสือที่ครอบคลุมมักเป็นวิธีที่ดีที่สุดในการเรียนรู้ภาษาและการหาหนังสือที่ดีเป็นขั้นตอนแรก สิ่งสำคัญคือต้องหลีกเลี่ยงหนังสือที่เขียนไม่ดีและที่สำคัญกว่านั้นคือหนังสือที่มีข้อผิดพลาดทางเทคนิคร้ายแรง

โปรดแนะนำการแก้ไขคำตอบที่ได้รับการยอมรับเพื่อเพิ่มหนังสือที่มีระดับความสามารถโดยประมาณและการย่อ / ขยายสั้น ๆ / คำอธิบายเกี่ยวกับหนังสือแต่ละเล่ม ( โปรดทราบว่าคำถามนั้นถูกล็อคดังนั้นจะไม่มีคำตอบใหม่ใด ๆ ตอบรับหนึ่งคำตอบในรายการ )

อย่าลังเลที่จะเลือกหนังสือคุณภาพหัวข้อหัวบทสรุประดับทักษะและสิ่งอื่นใดที่คุณเห็นว่าผิด หนังสือที่ชุมชน C ถือว่าน่าพอใจจะติดอยู่ในรายชื่อ ส่วนที่เหลือจะถูกลบอย่างสม่ำเสมอ

สำหรับหนังสือที่มีบทวิจารณ์โดยสมาคมผู้ใช้ C และ C ++ (ACCU) ควรเพิ่มลิงก์ไปยังบทวิจารณ์เหล่านั้นพร้อมกับหนังสือ

ดูสิ่งนี้ด้วย:


คำถามนี้ถูกกล่าวถึงในMetaเป็นส่วนหนึ่งของที่ถูกลบคำถามตรวจสอบ 2018
ฉันทามติคือการยกเลิกการลบและบำรุงรักษาอย่างแข็งขัน


31
เพื่อไม่ให้ดูหมิ่นคำถามซึ่งเป็นเรื่องดี แต่ ... คนส่วนใหญ่ใช้เวลาหลายปีกว่าจะเชี่ยวชาญ K&R มีมากขึ้นกว่าที่คุณคิด ความบางของหนังสือเป็นเรื่องหลอกลวง
dmckee --- ผู้ดูแลอดีตลูกแมว

4
หากคุณยังใหม่กับ C โปรดจำไว้ว่า C สมัยใหม่คือ ANSI C และอะไรก็ตามที่คาดการณ์ไว้ว่ามาตรฐาน (1989) อาจล้าสมัยไปแล้ว ยิงกลางปี ​​90 หรือใหม่กว่า
Dana Robinson

7
@Dhaivat ฉันคิดว่าไม่ระวังที่จะกระโดดขึ้นไปบน bandwagon K&R K&R ไม่ได้กล่าวถึงการออกแบบโปรแกรมที่ดีหรือการฝึกฝนการเขียนโปรแกรมที่ดีเป็นหลักเพราะมันถูกเขียนขึ้นก่อนใครก็รู้ว่าการเขียนโปรแกรมที่ดีคืออะไร ไม่ได้กล่าวถึงส่วนใดของภาษา C ที่ไม่จำเป็นหรือแม้แต่อันตราย หนังสือเล่มนี้มีการระบุไว้อย่างถูกต้องว่าเป็นคู่มืออ้างอิงไม่ควรใช้สำหรับการสอน / การเรียนรู้การเขียนโปรแกรมสมัยใหม่
Lundin

ฉันเห็นด้วยกับ Dana ว่าไม่มีอะไรที่เขียนก่อนมาตรฐาน ANSI / ISO ใน 89/90 ควรปรากฏในรายการเช่นนี้ คุณอาจพิจารณาที่จะระบุว่าหนังสือเล่มไหนที่อยู่ C99 และที่ไม่ได้
Lundin

คำตอบ:


492

คำเตือน

นี่คือรายการของหนังสือสุ่มที่มีคุณภาพหลากหลาย ในมุมมองของบางคน (ด้วยเหตุผลบางอย่าง) มันไม่ได้เป็นรายการหนังสือที่แนะนำอีกต่อไป หนังสือบางเล่มมีข้อความที่ไม่ถูกต้องโจ๋งครึ่มหรือสอนวิธีการที่ผิด / เป็นอันตราย ผู้ที่ตระหนักถึงหนังสือดังกล่าวสามารถแก้ไขคำตอบนี้เพื่อช่วยปรับปรุง ดูรายการหนังสือ C ได้ไปยุ่งเหยิง จะทำอย่างไรกับมัน? และลบการตรวจสอบคำถาม 2018ด้วย

ข้อมูลอ้างอิง (ทุกระดับ)

  • ภาษาโปรแกรม C (รุ่นที่ 2) - Brian W. Kernighan และ Dennis M. Ritchie (1988) ยังเป็นการแนะนำสั้น ๆ แต่สมบูรณ์เกี่ยวกับ C (C90 ไม่ใช่ C99 หรือรุ่นที่ใหม่กว่า) เขียนโดยนักประดิษฐ์ของ C อย่างไรก็ตามภาษามีการเปลี่ยนแปลงและสไตล์ C ที่ดีได้พัฒนาขึ้นในช่วง 25 ปีที่ผ่านมาและมีบางส่วนของ หนังสือที่แสดงอายุของมัน

  • C: คู่มืออ้างอิง (ฉบับที่ 5) - Samuel P. Harbison และ Guy R. Steele (2002) หนังสืออ้างอิงที่ยอดเยี่ยมใน C ถึงและรวมถึง C99 มันไม่ใช่การสอนและอาจไม่เหมาะสำหรับผู้เริ่มต้น มันยอดเยี่ยมถ้าคุณต้องเขียนคอมไพเลอร์สำหรับ C เช่นเดียวกับที่ผู้เขียนต้องทำเมื่อพวกเขาเริ่ม

  • C Pocket Reference (O'Reilly) - Peter Prinz และ Ulla Kirch-Prinz (2002)

  • คำถามที่พบบ่อยเกี่ยวกับ comp.lang.c - Steve Summit เว็บไซต์พร้อมคำตอบสำหรับคำถามมากมายเกี่ยวกับ C

  • รุ่นต่างๆของมาตรฐานภาษา C ที่สามารถพบได้ที่นี่ มีแบบร่างมาตรฐาน C11 แบบออนไลน์

  • มาตรฐาน C ใหม่ - การอ้างอิงที่มีคำอธิบายประกอบ (PDF ฟรี) - Derek M. Jones (2009) "มาตรฐานใหม่" ที่อ้างถึงคือมาตรฐาน C99 เก่ามากกว่า C11

  • เหตุผลในการ C99 มาตรฐาน


ผู้เริ่ม

สื่อกลาง

  • Modern C - Jens Gustedt (2017 1st Edn; 2020 2nd Edn) ครอบคลุม C ใน 5 ระดับ (เผชิญหน้า, ความใกล้ชิด, ความรู้ความเข้าใจ, ประสบการณ์, ความทะเยอทะยาน) ตั้งแต่ต้น C ถึงระดับสูง C ครอบคลุม C11 และ C17 รวมถึงหัวข้อและการเข้าถึงอะตอมมิกซึ่งหนังสือเล่มอื่น ๆ คอมไพเลอร์บางคนไม่รู้จักคุณสมบัติเหล่านี้ในทุกสภาพแวดล้อม

  • การเชื่อมต่อและการใช้งาน C - David R. Hanson (1997) จัดเตรียมข้อมูลเกี่ยวกับวิธีกำหนดขอบเขตระหว่างอินเตอร์เฟสและการนำไปใช้งานใน C ในแบบทั่วไปและแบบใช้ซ้ำได้ นอกจากนี้ยังแสดงให้เห็นถึงหลักการนี้ด้วยการนำไปใช้กับการใช้กลไกทั่วไปและโครงสร้างข้อมูลใน C เช่นรายการชุดข้อยกเว้นการจัดการสตริงการจัดสรรหน่วยความจำและอื่น ๆ โดยทั่วไปแฮนสันเอารหัสทั้งหมดที่เขาเขียนไว้เป็นส่วนหนึ่งของการสร้างไอคอนและlccและดึงบิตที่ดีที่สุดในรูปแบบที่คนอื่นสามารถนำมาใช้ใหม่สำหรับโครงการของตนเอง มันเป็นรูปแบบของการเขียนโปรแกรม C ที่ดีโดยใช้เทคนิคการออกแบบที่ทันสมัย ​​(รวมถึงข้อมูลนามธรรมของ Liskov) แสดงวิธีการจัดระเบียบโครงการ C ขนาดใหญ่เป็นห้องสมุดที่มีประโยชน์มากมาย

  • หนังสือปริศนา C - Alan R. Feuer (1998)

  • ไลบรารี C มาตรฐาน - PJ Plauger (1992) มันมีซอร์สโค้ดที่สมบูรณ์เพื่อการใช้งานของไลบรารีมาตรฐาน C89 พร้อมด้วยการอภิปรายอย่างกว้างขวางเกี่ยวกับการออกแบบและสาเหตุที่รหัสได้รับการออกแบบตามที่แสดง

  • ศตวรรษที่ 21 C: C เคล็ดลับจากโรงเรียนใหม่ - Ben Klemens (2012) นอกจากภาษา C หนังสือเล่มนี้อธิบาย gdb, valgrind, autotools และ git ความคิดเห็นเกี่ยวกับสไตล์พบได้ในส่วนสุดท้าย (บทที่ 6 ขึ้นไป)

  • อัลกอริทึมใน C - Robert Sedgewick (1997) ให้คุณเข้าใจถึงการใช้อัลกอริทึมใน C อย่างแท้จริงชัดเจนและชัดเจน อาจจะทำให้คุณต้องการทิ้งหนังสืออัลกอริธึมอื่น ๆ ของคุณทั้งหมดและเก็บหนังสือนี้ไว้

  • ตัวชี้บน C - Kenneth Reek (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 แนะนำ

ผู้เชี่ยวชาญ


ไม่มีหมวดหมู่

  • Essential C (PDF ฟรี) - Nick Parlante (2003) โปรดทราบว่าสิ่งนี้อธิบายถึงภาษา C90 ในหลาย ๆ จุด ( เช่นในการพูดถึง//ความคิดเห็นและการวางการประกาศตัวแปรที่จุดใดก็ได้ในรหัส) ดังนั้นควรได้รับการปฏิบัติด้วยความระมัดระวัง

  • คำถามที่พบบ่อยการเขียนโปรแกรม C: คำถามที่พบบ่อย - Steve Summit (1995) นี่คือหนังสือของเว็บไซต์ที่ระบุไว้ก่อนหน้า ไม่ครอบคลุม C99 หรือมาตรฐานในภายหลัง

  • C สั้น ๆ - Peter Prinz และ Tony Crawford (2005) หนังสือยอดเยี่ยมถ้าคุณต้องการการอ้างอิงสำหรับ C99

  • หน้าที่ C - Pieter Hartel และ Henk Muller (1997) สอนการปฏิบัติที่ทันสมัยซึ่งมีราคาสูงสำหรับการเขียนโปรแกรมระดับต่ำโดยมีการทำงานพร้อมกันและเป็นโมดุล

  • การฝึกเขียนโปรแกรม - Brian W. Kernighan และ Rob Pike (1999) หนังสือที่ดีมากในการติดตาม K&R มันใช้ C ++ และ Java ด้วย

  • กับดักและหลุมพราง Cโดย A. Koenig (1989) ดีมาก แต่สไตล์ C มีมาตรฐานก่อนวันที่ C ซึ่งทำให้ไม่แนะนำในสมัยนี้

    บางคนถกเถียงกันถึงการกำจัด 'กับดักและหลุมพราง' ออกจากรายการนี้เพราะบางคนติดกับดักว่าทำผิดพลาด คนอื่นยังคงเถียงกันเพื่อรวม บางทีมันควรจะถูกมองว่าเป็นหนังสือ 'ผู้เชี่ยวชาญ' เพราะต้องการความรู้ที่กว้างขวางของ C เพื่อทำความเข้าใจว่ามีอะไรเปลี่ยนแปลงไปบ้างตั้งแต่ถูกตีพิมพ์

  • สร้างเสียงกระเพื่อมของคุณเอง - Daniel Holden (2014) วิธีที่สนุกสนานในการเรียนรู้ C

  • MISRA-C - มาตรฐานอุตสาหกรรมเผยแพร่และดูแลโดยสมาคมอุตสาหกรรมซอฟต์แวร์ความน่าเชื่อถือ ครอบคลุม C89 และ C99

    แม้ว่านี่จะไม่ใช่หนังสือเช่นนี้โปรแกรมเมอร์หลายคนแนะนำให้อ่านและนำไปปฏิบัติให้ได้มากที่สุด เดิมที MISRA-C มีจุดประสงค์เพื่อเป็นแนวทางสำหรับการใช้งานที่สำคัญด้านความปลอดภัยโดยเฉพาะ แต่จะใช้กับพื้นที่ของแอปพลิเคชันที่ต้องการรหัส C ที่เสถียรและปราศจากข้อบกพร่อง (ใครไม่ต้องการบั๊กน้อยลง) MISRA-C กำลังกลายเป็นมาตรฐานอย่างแท้จริงในอุตสาหกรรมสมองกลฝังตัวทั้งหมดและกำลังได้รับความนิยมเพิ่มขึ้นแม้ในสาขาการเขียนโปรแกรมอื่น ๆ มี (อย่างน้อย) สามสิ่งพิมพ์ของมาตรฐาน (1998, 2004 และรุ่นปัจจุบันจาก 2012) นอกจากนี้ยังมีเอกสารแนวทางการปฏิบัติตาม MISRA จากปี 2559 และ MISRA C: 2012 การแก้ไขเพิ่มเติม 1 - แนวทางความปลอดภัยเพิ่มเติมสำหรับ MISRA C: 2012 (เผยแพร่ในเดือนเมษายน 2559)
    โปรดทราบว่าข้อ จำกัด บางอย่างในกฎ MISRA ไม่เหมาะสมกับทุกบริบท ตัวอย่างเช่นคำสั่ง 4.12 ระบุว่า "จะไม่ใช้การจัดสรรหน่วยความจำแบบไดนามิก" สิ่งนี้เหมาะสมในระบบฝังตัวซึ่งกฎ MISRA ได้รับการออกแบบ มันไม่เหมาะสมทุกที่ (ตัวอย่างเช่นคอมไพเลอร์โดยทั่วไปใช้การจัดสรรหน่วยความจำแบบไดนามิกสำหรับสิ่งต่าง ๆ เช่นตารางสัญลักษณ์และการดำเนินการโดยไม่มีการจัดสรรหน่วยความจำแบบไดนามิกอาจเป็นเรื่องยากหากไม่เป็นการผิดปกติ)

  • รายการที่เก็บถาวรของหนังสือที่ตรวจสอบโดย ACCU ในC ของผู้เริ่มต้น (116 ชื่อ) จาก 2007 และAdvanced C (76 ชื่อเรื่อง) จากปี 2008 หนังสือเหล่านี้ส่วนใหญ่ไม่ได้อยู่ในไซต์หลักอีกต่อไปและคุณไม่สามารถเรียกดูได้ตามหัวเรื่อง อย่างไรก็ตาม.


คำเตือน

ระวังหนังสือที่เขียนโดยเฮอร์เบิร์ Schildt โดยเฉพาะอย่างยิ่งคุณควรอยู่ห่างจากC: The Complete Reference (รุ่นที่ 4, 2000) ซึ่งรู้จักกันในบางวงการว่า C: The Nonsense ที่สมบูรณ์

นอกจากนี้ยังไม่ได้ใช้หนังสือแจ้งให้เรา C (16 THฉบับ 2017) โดย Yashwant Kanetkar หลายคนมองว่าเป็นหนังสือที่ล้าสมัยที่สอน Turbo C และมีเนื้อหาที่ล้าสมัยทำให้เข้าใจผิดและไม่ถูกต้องมากมาย ตัวอย่างเช่นหน้า 137 กล่าวถึงผลลัพธ์ที่คาดหวังจากprintf("%d %d %d\n", a, ++a, a++)และไม่ได้จัดประเภทเป็นพฤติกรรมที่ไม่ได้กำหนดเท่าที่ควร

เรียนรู้ C The Hard Way (2015) โดย Zed Shaw หนังสือที่มีบทวิจารณ์แบบผสม บทวิจารณ์ของหนังสือเล่มนี้โดย Tim Hentenaar:

เพื่อสรุปมุมมองของฉันซึ่งวางไว้ด้านล่างผู้เขียนนำเสนอเนื้อหาในลักษณะที่เกินความจริงและทำให้เข้าใจผิดอย่างยิ่งคลังข้อมูลทั้งหมดเป็นระเบียบที่มาพร้อมกันและความคิดเห็นและการวิเคราะห์บางอย่างที่เขาเสนอนั้นผิดธรรมดา ฉันพยายามดูหนังสือเล่มนี้ผ่านสายตาของมือใหม่ แต่น่าเสียดายที่ฉันลำเอียงจากประสบการณ์ในการเขียนรหัสใน C. มันชัดเจนสำหรับฉันว่าผู้เขียนมีความเข้าใจข้อบกพร่องของ C หรือเขาจงใจเกินความจริง จุดที่เขาหลอกลวงผู้อ่าน (โดยเจตนาหรืออย่างอื่น)

"Learn C The Hard Way" ไม่ใช่หนังสือที่ฉันสามารถแนะนำให้คนที่กำลังเรียนรู้ที่จะเขียนโปรแกรมและการเรียนรู้ C. หากคุณเป็นโปรแกรมเมอร์ที่มีความสามารถในภาษาอื่น ๆ ที่เกี่ยวข้องแล้วแสดงถึงการแสดงออกที่น่าสนใจและผิดปกติใน C ถึงแม้ว่าฉันจะมีการจองเกี่ยวกับบางส่วนของหนังสือ Jonathan Leffler


เก่า


ร่วมสมทบอื่น ๆ , ไม่ได้เครดิตจำเป็นต้องอยู่ในประวัติการแก้ไขรวม:
อเล็กซ์ล็อควู้ด , เบนแจ็คสัน , บับเบิ้ล , กรงเล็บ , coledot , Dana โรบินสัน , แดเนียลโฮลเดน , DERVIN Thunk , DWC , Erci Hou , Garen , haziz , โยฮัน Bezem , โจนาธาน Leffler , โจชัว Partogi , Lucas , Lundin , Matt K. , mossplix , Matthieu M. , midor , Nietzche-jou , Norman Ramsey , r3st0r3 , ridthyselfelf , Robert S. Barnes , Steve Summit , Tim Ring , Tony Bai , VMAtm


6
@ PabloBarríaUrendaเนื้อหาที่ไม่เหมาะสมควรได้รับการแก้ไขด้วยการโพสต์การโพสต์ "การคลิกสองครั้งไป" เป็นข้อความที่ไร้สาระดังนั้นธงของคุณอาจถูกปฏิเสธ และการถกเถียงกันว่าธงที่กล่าวมานั้นเป็นที่น่ารังเกียจหรือไม่ก็ไม่ควรอยู่ที่นี่เช่นกัน โพสต์ข้อกังวลดังกล่าวที่meta.stackoverflow.comแทน
Lundin

1
โง่เกี่ยวกับ "สองคลิกไป" คืออะไร?
Pablo Barría Urenda

3
ในปีพ. ศ. 2562 ฉันพบว่าหนังสือ<Modern C>มีมูลค่าการอ่านสูงมากมันใช้ไวยากรณ์ c99 & c11 จำนวนมากกะทัดรัดและเขียนได้ดีมาก และคุณรู้อะไรไหม มันว่าง !!! คุณสามารถดาวน์โหลดเวอร์ชันล่าสุดเป็น pdf ได้ที่นี่: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (BTW ดูเหมือนว่าผู้เขียนกำลังอัปเดตและเผยแพร่หนังสือที่ลิงก์ด้านบนตามต้องการ)
Eric Wang

1
ฉันกำลังจะเพิ่มหนังสือเพียงเพื่อจะรู้ว่ามันได้รับการแก้ไขแล้วว่าไม่ได้รับการแนะนำ อาจปล่อยให้สิ่งเหล่านั้นปรากฏในโพสต์ที่อ้างถึงเหตุผลว่าทำไมจึงควรหลีกเลี่ยง อาจเป็นส่วนที่แยกต่างหากของหนังสือที่ไม่แนะนำหรือไม่
gst

3
ฉันพยายามแก้ไขคำตอบไม่สำเร็จ (เห็นได้ชัดว่าเกิดจากการจัดรูปแบบไม่ถูกต้องซึ่งจะปรากฏขึ้นก่อนที่ฉันจะทำการแก้ไข) อย่างไรก็ตามอย่างน้อยหนังสือสองเล่มที่แนะนำมีการระบุไว้ว่า "ที่จะหลีกเลี่ยง" นี่: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided โปรดลบ "สร้างเสียงกระเพื่อมของคุณเอง" และ "เรียนรู้วิธีที่ยาก" และเพิ่มลิงค์ด้านบนไปยังส่วนคำเตือน
gst
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.