この質問は、コミュニティが管理する質の高い書籍のリストを収集しようとしています。cさまざまなスキルレベルを対象としたプログラミング言語。
C は複雑なプログラミング言語であり、オンライン チュートリアルを読んで外出先で習得するのは困難です。包括的な本を読むことがこの言語を学ぶ最善の方法であることが多く、良い本を見つけることが最初のステップです。書き方が下手な本を避けることが重要です。さらに重要なのは、重大な技術的エラーを含む本を避けることです。
承認された回答に編集を提案して、質の高い本を追加してください。各本のスキルレベルと短い宣伝文句/説明を添えてください。(質問はロックされているため、新しい回答は受け入れられません。リストには 1 つの回答が保持されます)
本の選択、品質、見出し、概要、スキル レベル、その他間違っていると思われる点について、自由に議論してください。ここの C コミュニティで満足できると判断された本はリストに残りますが、それ以外の本は定期的に削除されます。
C および C++ ユーザー協会 (ACCU) によるレビューがある書籍の場合は、そのレビューへのリンクを書籍とともに追加する必要があります。
参照:
- その他のC関連リソースc タグウィキ
- 同様のリストC++ の:決定版 C++ 書籍ガイドとリスト
この質問はメタの一環として削除された質問監査 2018
削除せずに積極的に維持していくことが合意されました。
ベストアンサー1
警告!
これは、さまざまな質の本をランダムにリストしたものです。一部の人々(ある程度の正当性がある)の見解では、これはもはや推奨本のリストではありません。リストされている本の中には、明らかに誤った記述が含まれていたり、間違った/有害な慣行を教えているものがあります。そのような本を知っている人は、この回答を編集して改善することができます。C ブック リストがおかしくなりました。どうすればよいでしょうか?、また削除された質問監査 2018。
リファレンス(全レベル)
C プログラミング言語 (第 2 版)-ブライアン・W・カーニガンそしてデニス・M・リッチー(1988年)。これは、Cの入門書としては優れており、短いながらも完全な内容となっている(C89、 ないC99この本は、C の発明者によって書かれた (またはそれ以降のバージョン) ものです。しかし、この 25 年間で言語は変化し、優れた C スタイルが開発され、その古さがわかる部分もあります。
C: リファレンスマニュアル (第 5 版)- Samuel P. Harbison と Guy R. Steele (2002)。C99 までの C に関する優れたリファレンス ブックです。チュートリアルではないため、初心者には不向きかもしれません。著者が始めた頃のように、C 用のコンパイラを作成する必要がある場合は、この本が最適です。
C ポケットリファレンス (O'Reilly)- ピーター・プリンツとウラ・キルヒ=プリンツ(2002年)。
comp.lang.c の FAQ- Steve Summit。C に関する多くの質問に対する回答が掲載されている Web サイト。
新しい C 標準 - 注釈付きリファレンス(無料 PDF) - Derek M. Jones (2009)。ここで言及されている「新しい標準」は、C11 ではなく、古い C99 標準です。
初心者
C プログラミング: 現代的なアプローチ (第 2 版)- KN King (2008)。C を学ぶのに適した本です。
C プログラミング (第 4 版)- Stephen Kochan (2014)。優れた一般入門書およびチュートリアル。
C プライマー プラス (第 5 版)- スティーブン・プラタ(2004)
Cに関する本- アル・ケリー/アイラ・ポール(1998年)。
Cブック(無料オンライン) - マイク・バナハン、デクラン・ブレイディ、マーク・ドラン (1991)。
C: プログラミングの方法 (第 8 版)- Paul Deitel と Harvey M. Deitel (2015)。初心者向けの優れたヒントやベスト プラクティスが多数掲載されています。索引も非常に優れており、適切な参考資料として役立ちます (ただし、完全に網羅的ではなく、内容が非常に浅い)。
ヘッドファーストC- デイヴィッド・グリフィスとドーン・グリフィス(2012年)。
初級C(第5版)- Ivor Horton (2013)。小さいながらも完全なプログラムを多数使用して、ポインターについて非常にわかりやすく説明しています。
サムズ 21 日間で C を独学する- Bradley L. Jones と Peter Aitken (2002)。非常に優れた入門書です。
- C 簡単なステップ(第 5 版)- Mike McGrath (2018)。C を学習したり参照したりするのに適した本です。
中級
モダンC— Jens Gustedt (2017 初版、2019 2 版)。初級 C から上級 C まで、5 つのレベル (出会い、知り合い、認識、経験、野心) で C をカバーしています。他の書籍ではほとんど取り上げられていない、スレッドやアトミック アクセスを含む C11 と C17 をカバーしています。すべてのコンパイラがすべての環境でこれらの機能を認識するわけではありません。
C インターフェースと実装- David R. Hanson (1997)。C 言語でインターフェイスと実装の境界を汎用的かつ再利用可能な方法で定義する方法に関する情報を提供します。また、この原則を、リスト、セット、例外、文字列操作、メモリ割り当てなどの C 言語の一般的なメカニズムとデータ構造の実装に適用することで実証します。基本的に、Hanson は、ビルドの一部として記述したすべてのコードをアイコンそしてLCCCそして、他の人が自分のプロジェクトで再利用できる形で最良の部分を抽出しました。これは、現代の設計技術(リスコフのデータ抽象化) では、大規模な 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言語による問題解決とプログラム設計(第6版)- ジェリ・R・ハンリーとエリオット・B・コフマン(2009年)。
データ構造 - C を使用した高度なアプローチ- ジェフリー・エサコフとトム・ワイス(1989年)。
C の解放- Richard Heathfield、Lawrence Kirby、他 (2000)。理想的ではありませんが、中級プログラマーがこの本に書かれた問題を練習する価値はあります。これは、comp.lang.c の貢献者によって提案された、優れたクックブックのようなアプローチです。
- ANSI-C によるオブジェクト指向プログラミング(無料 PDF) - Axel-Tobias Schreiner (1993)。コードは少し複雑です。C++ が必要な場合は、C++ を使用してください。もちろん、C90 のみを使用します。
専門家
エキスパート C プログラミング: 奥深い C の秘密- Peter van der Linden (1994)。Sun コンパイラ チームからの興味深い情報と戦いの物語が多数掲載されていますが、一部少し古くなっています。
例による高度な C プログラミング- ジョン・W・ペリー(1998年)。
UNIX 環境での高度なプログラミング- Richard W. Stevens と Stephen A. Rago (2013)。C コードから Unix API を使用する方法については包括的に説明していますが、C コーディングの仕組みについてはあまり説明されていません。
未分類
エッセンシャルC(無料 PDF) - Nick Parlante (2003)。これは、C90 言語をいくつかの点で説明していることに注意してください (たとえば、コメントの説明
//
や、コード内の任意のポイントでの変数宣言の配置など)。そのため、注意して扱う必要があります。C プログラミング FAQ: よくある質問- Steve Summit (1995)。これは、前にリストした Web サイトの書籍です。C99 以降の標準については扱っていません。
C の概要- Peter Prinz と Tony Crawford (2005)。C99 の参考資料が必要な場合に最適な本です。
C を簡単に説明すると (第 2 版)- Peter Prinz と Tony Crawford (2016)、C11 を網羅した参考書。
機能的C- Pieter Hartel と Henk Muller (1997)。並行性とモジュール性を念頭に置き、低レベルプログラミングに非常に役立つ最新のプラクティスを教えます。
プログラミングの実践- Brian W. Kernighan と Rob Pike (1999)。K&R に付随する非常に優れた書籍です。C++ と Java も使用されています。
C 罠と落とし穴A. Koenig (1989) 著。非常に優れていますが、C スタイルは標準 C より古いため、現在ではあまりお勧めできません。
「Traps and Pitfalls」は一部の人々を罠にかけ、間違いを犯させるので、このリストから削除すべきだと主張する人もいますが、この本を含めるべきだと主張する人もいます。この本は、出版されてから何が変わったかを理解するためには、C に関するある程度の知識が必要なので、「専門家向け」の本とみなすべきかもしれません。
MISRA-C- Motor Industry Software Reliability Association によって公開および管理されている業界標準。C89 および C99 をカバーします。
これは厳密には書籍ではありませんが、多くのプログラマーは、できるだけ多くの部分を読んで実装することを推奨しています。MISRA-C は、もともと特に安全性が重要なアプリケーション向けのガイドラインとして意図されていましたが、安定したバグのない C コードが求められるあらゆるアプリケーション分野に適用されます (バグが少ないことを望まない人はいないでしょう)。MISRA-C は、組み込み業界全体で事実上の標準になりつつあり、他のプログラミング分野でもますます人気が高まっています。この標準には (少なくとも) 3 つの出版物があります (1998 年、2004 年、および 2012 年の現在のバージョン)。また、2016 年の MISRA コンプライアンス ガイドライン ドキュメントや、MISRA C:2012 修正 1 - MISRA C:2012 の追加セキュリティ ガイドライン (2016 年 4 月発行) もあります。
MISRA ルールの制約の一部は、すべての状況に適切ではないことに注意してください。たとえば、指令 4.12 には「動的メモリ割り当ては使用してはならない」と記載されています。これは、MISRA ルールが設計されている組み込みシステムでは適切ですが、すべての状況に適しているわけではありません。(たとえば、コンパイラは一般に、シンボル テーブルなどに動的メモリ割り当てを使用します。動的メモリ割り当てなしで行うことは、非常識ではないにしても困難です。)
ACCUがレビューした書籍のアーカイブリスト初級C(116タイトル)2007年から上級C(76 タイトル) 2008 年から。これらのほとんどはメイン サイトにはもう掲載されていないようで、主題別に閲覧することもできません。
警告
注意すべき本やチュートリアルのリストがありますISO 9899 ウィキは、ISO や C 標準とは正式には関連付けられていませんが、C 標準に関する情報が含まれています (ただし、ISO 9899:2011 のリリースを称賛しており、ISO 9899:2018 のリリースについては言及していません)。
次のような本には注意してくださいハーバート・シルト特に、C: 完全なリファレンス(第 4 版、2000 年)、一部の界隈では C: The Complete Nonsense として知られています。
また、本も使用しないでくださいCしましょう(第16版、2017年)Yashavant Kanetkar著。この本はTurbo Cを教える時代遅れの本であり、多くの時代遅れで誤解を招くような間違った内容が含まれていると多くの人が考えています。たとえば、137ページでは、期待される出力について説明されておりprintf("%d %d %d\n", a, ++a, a++)
、次のように分類されていません。未定義の動作当然のことですが、 では、gets
を使用したり、 の戻り値を型の変数に格納したり、で を使用するなど、移植性がなくバグの多いコーディング手法が一貫して推奨されています。%[\n]s
scanf
getchar
char
fflush
stdin
難しい方法でCを学ぶ(2015年)ゼッド・ショー著。賛否両論ある本。この本に対する批評ティム・ヘンテナール著:
以下に示す私の意見をまとめると、著者は内容を非常に単純化しすぎて誤解を招くような方法で提示しており、全体の内容は混乱しており、著者が提示する意見や分析の一部はまったく間違っています。私は初心者の目からこの本を見ようとしましたが、残念ながら C でコードを書いた長年の経験によって偏見を持っています。著者が C について誤った理解を持っているか、意図的に単純化しすぎて実際に読者を誤解させているかのどちらかであることは明らかです (意図的か否かは関係ありません)。
「Learn C The Hard Way」は、プログラミングと C の両方を学んでいる人にお勧めできる本ではありません。すでに他の関連言語で有能なプログラマーであれば、この本は C に関する興味深く珍しい解説となっていますが、一部に疑問を感じます。Jonathan Leffler
時代遅れ
- 実践Cプログラミング(第3版)- スティーブ・オウアライン (1997)(初心者)
改訂履歴に必ずしも記載されていないその他の貢献者には、次の者が含まれます。アレックス・ロックウッド、ベン・ジャクソン、バブル、爪、コレドット、ダナ・ロビンソン、ダニエル・ホールデン、デスベスト、ダービン・サンク、dwc、エルシ・ホウ、ガレン、ハジズ、ヨハン・ベゼム、ジョナサン・レフラー、ジョシュア・パルトギ、ルーカス、ランディン、マットK.、モスプリックス、マチュー M.、ミドール、ニーチェ城、ノーマン・ラムゼイ、r3st0r3、自分を解放する、ロバート・S・バーンズ、スマリナックス、スティーブ・サミット、ティム・リング、トニー・バイ、VMAtm