Panduan dan Daftar Buku C Definitif

400

Pertanyaan ini berupaya mengumpulkan daftar buku berkualitas yang dikelola komunitas di bahasa pemrograman, ditargetkan pada berbagai tingkat keterampilan.

C adalah bahasa pemrograman yang kompleks yang sulit untuk diambil saat bepergian dengan membaca tutorial online. Buku yang komprehensif seringkali merupakan cara terbaik untuk belajar bahasa, dan menemukan buku yang bagus adalah langkah pertama. Penting untuk menghindari buku yang ditulis dengan buruk, dan yang lebih penting, buku yang mengandung kesalahan teknis serius.

Harap sarankan pengeditan untuk jawaban yang diterima untuk menambah buku berkualitas, dengan perkiraan tingkat keterampilan dan uraian singkat / uraian tentang masing-masing buku. ( Perhatikan bahwa pertanyaan terkunci, sehingga tidak ada jawaban baru akan diterima. Satu jawaban dipertahankan dengan daftar )

Jangan ragu memperdebatkan pilihan, kualitas, judul, ringkasan, tingkat keterampilan, dan hal lain yang Anda lihat salah. Buku-buku yang dianggap memuaskan oleh komunitas C di sini akan tetap ada dalam daftar; sisanya akan dihapus secara teratur.

Untuk buku yang memiliki ulasan oleh Asosiasi Pengguna C dan C ++ (ACCU), tautan ke ulasan tersebut harus ditambahkan bersama dengan buku.

Lihat juga:


Pertanyaan ini dibahas di Meta sebagai bagian dari Audit Pertanyaan Terhapus 2018 .
Konsensus adalah untuk membuatnya tidak terhapus dan dipelihara secara aktif.

lillq
sumber
31
Bukan untuk meremehkan pertanyaan, mana yang baik, tapi ... kebanyakan orang butuh bertahun-tahun untuk menguasai K&R. Ada lebih banyak di sana daripada yang Anda pikirkan. Ketipisan buku itu menipu.
dmckee --- ex-moderator kitten
4
Jika Anda baru mengenal C, perlu diingat bahwa C modern adalah ANSI C dan apa pun yang mendahului standar tersebut (1989) mungkin sudah ketinggalan zaman. Tembak untuk pertengahan 90-an atau lebih baru.
Dana Robinson
7
@Dhaivat saya pikir tidak, hati-hati untuk melompat pada kereta musik K&R. K&R tidak membahas desain program yang baik atau praktik pemrograman yang baik, terutama karena itu awalnya ditulis sebelum ada yang tahu apa praktik pemrograman yang baik itu. Tidak disebutkan bagian mana dari bahasa C yang berlebihan atau bahkan berbahaya. Buku ini terdaftar dengan benar sebagai referensi manual, tidak boleh digunakan untuk pengajaran / pembelajaran pemrograman modern.
Lundin
Saya setuju dengan Dana bahwa tidak ada yang ditulis sebelum standardisasi ANSI / ISO di 89/90 akan muncul pada daftar seperti ini. Anda juga dapat mempertimbangkan untuk menyatakan buku mana yang membahas C99 dan mana yang tidak.
Lundin

Jawaban:

492

Peringatan

Ini adalah daftar buku acak dengan kualitas beragam. Dalam pandangan beberapa orang (dengan beberapa pembenaran), ini bukan lagi daftar buku yang direkomendasikan. Beberapa buku yang tercantum berisi pernyataan yang salah atau mengajarkan praktik yang salah / berbahaya. Orang yang mengetahui buku semacam itu dapat mengedit jawaban ini untuk membantu memperbaikinya. Lihat Daftar buku C menjadi berantakan. Apa hubungannya dengan itu? , dan audit pertanyaan dihapus 2018 .

Referensi (Semua Tingkat)

  • Bahasa Pemrograman C (2nd Edition) - Brian W. Kernighan dan Dennis M. Ritchie (1988). Masih merupakan pengantar C yang baik, singkat namun lengkap untuk C (C90, bukan C99 atau versi yang lebih baru), ditulis oleh penemu C. Namun, bahasanya telah berubah dan gaya C yang baik telah berkembang dalam 25 tahun terakhir, dan ada bagian dari buku yang menunjukkan umurnya.

  • C: A Reference Manual (Edisi 5) - Samuel P. Harbison dan Guy R. Steele (2002). Buku referensi yang sangat baik tentang C, hingga dan termasuk C99. Ini bukan tutorial, dan mungkin tidak cocok untuk pemula. Sangat bagus jika Anda perlu menulis kompiler untuk C, seperti yang harus dilakukan penulis ketika mereka mulai.

  • Referensi Saku C (O'Reilly) - Peter Prinz dan Ulla Kirch-Prinz (2002).

  • FAQ comp.lang.c - Steve Summit. Situs web dengan jawaban atas banyak pertanyaan tentang C.

  • Berbagai versi standar bahasa C dapat ditemukan di sini . Ada versi online standar draft C11 .

  • Standar C baru - referensi beranotasi (Gratis PDF) - Derek M. Jones (2009). "Standar baru" yang dimaksud adalah standar C99 lama dan bukan C11.

  • Dasar Pemikiran untuk Standar C99 .


Pemula

Menengah

  • Modern C - Jens Gustedt (2017 1st Edn; 2020 2nd Edn). Mencakup C dalam 5 level (perjumpaan, kenalan, kognisi, pengalaman, ambisi) dari awal C hingga lanjutan C. Ini mencakup C11 dan C17, termasuk utas dan akses atom, yang dilakukan beberapa buku lain. Tidak semua kompiler mengenali fitur-fitur ini di semua lingkungan.

  • C Antarmuka dan Implementasi - David R. Hanson (1997). Memberikan informasi tentang cara menentukan batas antara antarmuka dan implementasi dalam C secara umum dan dapat digunakan kembali. Ini juga menunjukkan prinsip ini dengan menerapkannya pada implementasi mekanisme umum dan struktur data dalam C, seperti daftar, set, pengecualian, manipulasi string, pengalokasi memori, dan banyak lagi. Pada dasarnya, Hanson mengambil semua kode yang dia tulis sebagai bagian dari membangun Icon dan lcc dan mengeluarkan bit-bit terbaik dalam bentuk yang dapat digunakan kembali oleh orang lain untuk proyek mereka sendiri. Ini adalah model pemrograman C yang baik menggunakan teknik desain modern (termasuk abstraksi data Liskov), menunjukkan bagaimana mengatur proyek C besar sebagai sekelompok perpustakaan yang bermanfaat.

  • The C Puzzle Book - Alan R. Feuer (1998)

  • Perpustakaan C Standar - PJ Plauger (1992). Ini berisi kode sumber lengkap untuk implementasi perpustakaan standar C89, bersama dengan diskusi yang luas tentang desain dan mengapa kode dirancang seperti yang ditunjukkan.

  • 21st Century C: C Tips dari New School - Ben Klemens (2012). Selain bahasa C, buku ini menjelaskan gdb, valgrind, autotools, dan git. Komentar tentang gaya ditemukan di bagian terakhir (Bab 6 dan seterusnya).

  • Algoritma dalam C - Robert Sedgewick (1997). Memberi Anda pemahaman nyata tentang penerapan algoritma dalam C. Sangat jelas dan jelas; mungkin akan membuat Anda ingin membuang semua buku algoritma Anda yang lain dan menyimpan yang ini.

  • Pointers on C - Kenneth Reek (1997).

  • Pointer di C - Naveen Toppo dan Hrishikesh Dewan (2013).

  • Pemecahan Masalah dan Desain Program dalam C (Edisi ke-6) - Jeri R. Hanly dan Elliot B. Koffman (2009).

  • Struktur Data - Suatu Pendekatan Tingkat Lanjut Menggunakan C - Jeffrey Esakov dan Tom Weiss (1989).

  • C Unleashed - Richard Heathfield, Lawrence Kirby, dkk. (2000). Tidak ideal, tetapi para programmer menengah perlu mempraktikkan masalah yang ditulis dalam buku ini. Ini adalah pendekatan seperti buku resep yang disarankan oleh kontributor comp.lang.c.

Ahli


Tidak Dikategorikan

  • Essential C (PDF gratis) - Nick Parlante (2003). Perhatikan bahwa ini menjelaskan bahasa C90 di beberapa titik ( misalnya , dalam membahas //komentar dan penempatan deklarasi variabel pada titik-titik sewenang-wenang dalam kode), sehingga harus diperlakukan dengan hati-hati.

  • Tanya Jawab Pemrograman C: Pertanyaan yang Sering Diajukan - Steve Summit (1995). Ini adalah buku situs web yang tercantum sebelumnya. Itu tidak mencakup C99 atau standar selanjutnya.

  • C in a Nutshell - Peter Prinz dan Tony Crawford (2005). Buku bagus jika Anda membutuhkan referensi untuk C99.

  • Fungsional C - Pieter Hartel dan Henk Muller (1997). Mengajar praktik-praktik modern yang sangat berharga untuk pemrograman tingkat rendah, dengan pertimbangan konkurensi dan modularitas.

  • Praktek Pemrograman - Brian W. Kernighan dan Rob Pike (1999). Buku yang sangat bagus untuk menemani K&R. Ini menggunakan C ++ dan Java juga.

  • C Traps and Pitfalls oleh A. Koenig (1989). Sangat bagus, tapi gaya C standar tanggal C, yang membuatnya kurang direkomendasikan hari ini.

    Beberapa berpendapat untuk menghapus 'Jebakan dan Jebakan' dari daftar ini karena telah menjebak beberapa orang untuk membuat kesalahan; yang lain terus berdebat untuk dimasukkan. Mungkin buku itu harus dianggap sebagai buku 'ahli' karena ia membutuhkan pengetahuan C yang cukup luas untuk memahami apa yang berubah sejak buku itu diterbitkan.

  • Build Your Own Lisp - Daniel Holden (2014). Cara yang menyenangkan untuk belajar C.

  • MISRA-C - standar industri yang diterbitkan dan dikelola oleh Asosiasi Keandalan Perangkat Lunak Industri Motor. Meliputi C89 dan C99.

    Meskipun ini bukan buku seperti itu, banyak programmer merekomendasikan membaca dan mengimplementasikannya sebanyak mungkin. MISRA-C pada awalnya dimaksudkan sebagai pedoman untuk aplikasi yang sangat kritis terhadap keselamatan, tetapi ini berlaku untuk area aplikasi mana pun yang diinginkan, kode C bebas bug yang stabil (siapa yang tidak menginginkan lebih sedikit bug?). MISRA-C menjadi standar de facto di seluruh industri tertanam dan semakin populer bahkan di cabang pemrograman lain. Ada (setidaknya) tiga publikasi standar (1998, 2004, dan versi saat ini dari 2012). Ada juga dokumen Pedoman Kepatuhan MISRA mulai 2016, dan MISRA C: 2012 Amendemen 1 - Panduan Keamanan Tambahan untuk MISRA C: 2012 (diterbitkan pada April 2016).
    Perhatikan bahwa beberapa penyempitan dalam aturan MISRA tidak sesuai untuk setiap konteks. Misalnya, arahan 4.12 menyatakan "Alokasi memori dinamis tidak boleh digunakan". Ini sesuai dalam sistem tertanam yang dirancang aturan MISRA; itu tidak pantas di mana-mana. (Compiler, misalnya, umumnya menggunakan alokasi memori dinamis untuk hal-hal seperti tabel simbol, dan melakukan tanpa alokasi memori dinamis akan sulit, jika tidak masuk akal.)

  • Daftar arsip buku-buku yang diulas oleh ACCU tentang Beginner's C (116 judul) dari 2007 dan Advanced C (76 judul) dari 2008. Sebagian besar dari ini tidak terlihat berada di situs utama lagi, dan Anda tidak dapat menjelajahinya dengan subjek bagaimanapun.


Peringatan

Waspadalah terhadap buku-buku yang ditulis oleh Herbert Schildt . Secara khusus, Anda harus menjauh dari C: Referensi Lengkap (Edisi ke-4, 2000), yang dikenal di beberapa kalangan sebagai C: Omong kosong.

Juga tidak menggunakan buku Let Us C (16 th Edition, 2017) oleh Yashwant Kanetkar. Banyak orang melihatnya sebagai buku usang yang mengajarkan Turbo C dan memiliki banyak materi yang usang, menyesatkan, dan salah. Misalnya, halaman 137 membahas output yang diharapkan dari printf("%d %d %d\n", a, ++a, a++)dan tidak mengategorikannya sebagai perilaku yang tidak ditentukan sebagaimana mestinya.

Learn C The Hard Way (2015) oleh Zed Shaw. Buku dengan ulasan beragam. Sebuah kritik terhadap buku ini oleh Tim Hentenaar:

Untuk meringkas pandangan saya, yang disajikan di bawah ini, penulis menyajikan materi dengan cara yang sangat disederhanakan dan menyesatkan, seluruh korpus berantakan, dan beberapa pendapat dan analisis yang ia tawarkan benar-benar salah. Saya sudah mencoba untuk melihat buku ini melalui mata seorang pemula, tetapi sayangnya saya bias oleh pengalaman bertahun-tahun menulis kode dalam C. Jelas bagi saya bahwa baik penulis memiliki pemahaman yang salah tentang C, atau dia sengaja menyederhanakan terlalu ke titik di mana ia sebenarnya menyesatkan pembaca (sengaja atau tidak.)

"Learn C The Hard Way" bukan buku yang bisa saya rekomendasikan kepada seseorang yang sedang belajar untuk memprogram dan belajar C. Jika Anda sudah menjadi programmer yang kompeten dalam beberapa bahasa terkait lainnya, maka buku itu merupakan eksposisi yang menarik dan tidak biasa pada C, meskipun saya punya keraguan tentang bagian-bagian buku ini. Jonathan Leffler


Ketinggalan jaman


Kontributor lain , belum tentu dikreditkan dalam sejarah revisi, termasuk:
Alex Lockwood , Ben Jackson , Bubbles , cakar , coledot , Dana Robinson , Daniel Holden , Dervin dunk , 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 , Cincin Tim , Tony Bai , VMAtm

Jonathan Leffler
sumber
6
@ PabloBarríaUrenda Konten yang tidak pantas harus diatasi dengan menandai pos. "Dua klik saja" adalah pernyataan konyol, jadi bendera Anda mungkin akan ditolak. Dan setiap perdebatan tentang apakah bendera yang disebutkan itu menyinggung atau tidak seharusnya juga tidak ada di sini. Poskan kekhawatiran seperti itu di meta.stackoverflow.com sebagai gantinya.
Lundin
1
Apa yang konyol tentang "dua klik saja"?
Pablo Barría Urenda
3
Seperti tahun 2019, saya menemukan buku ini <Modern C>sangat layak dibaca, menggunakan banyak sintaks c99 & c11, sangat ringkas & ditulis dengan baik. Dan tahukah Anda? Gratis !!! Anda dapat mengunduh versi terbaru sebagai pdf di sini: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf (BTW, tampaknya penulis memperbarui & menerbitkan buku di tautan di atas sesuai kebutuhan)
Eric Wang
1
Saya akan menambahkan buku hanya untuk menyadari bahwa buku itu telah diedit sebagai tidak direkomendasikan. Mungkin meninggalkan yang terlihat di pos mengutip alasan mengapa itu harus dihindari. Mungkin bahkan bagian terpisah dari buku TIDAK direkomendasikan?
gst
3
Saya mencoba untuk tidak berhasil mengedit jawaban (tampaknya karena pemformatan yang salah, yang muncul bahkan sebelum saya mengedit). Bagaimanapun, setidaknya dua buku yang direkomendasikan terdaftar sebagai "harus dihindari" di sini: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Harap hapus "Bangun Lisp Anda sendiri" dan "Pelajari C dengan cara yang sulit", dan tambahkan tautan di atas ke bagian Peringatan .
gst