決定版Cブックガイドとリスト 質問する

決定版Cブックガイドとリスト 質問する

この質問は、コミュニティが管理する質の高い書籍のリストを収集しようとしています。さまざまなスキルレベルを対象としたプログラミング言語。

C は複雑なプログラミング言語であり、オンライン チュートリアルを読んで外出先で習得するのは困難です。包括的な本を読むことがこの言語を学ぶ最善の方法であることが多く、良い本を見つけることが最初のステップです。書き方が下手な本を避けることが重要です。さらに重要なのは、重大な技術的エラーを含む本を避けることです。

承認された回答に編集を提案して、質の高い本を追加してください。各本のスキルレベルと短い宣伝文句/説明を添えてください。(質問はロックされているため、新しい回答は受け入れられません。リストには 1 つの回答が保持されます)

本の選択、品質、見出し、概要、スキル レベル、その他間違っていると思われる点について、自由に議論してください。ここの C コミュニティで満足できると判断された本はリストに残りますが、それ以外の本は定期的に削除されます。

C および C++ ユーザー協会 (ACCU) によるレビューがある書籍の場合は、そのレビューへのリンクを書籍とともに追加する必要があります。

参照:


この質問はメタの一環として削除された質問監査 2018
削除せずに積極的に維持していくことが合意されました。

ベストアンサー1

警告

これは、さまざまな質の本をランダムにリストしたものです。一部の人々(ある程度の正当性がある)の見解では、これはもはや推奨本のリストではありません。リストされている本の中には、明らかに誤った記述が含まれていたり、間違った/有害な慣行を教えているものがあります。そのような本を知っている人は、この回答を編集して改善することができます。C ブック リストがおかしくなりました。どうすればよいでしょうか?、また削除された質問監査 2018

リファレンス(全レベル)


初心者

中級

  • モダン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(無料 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]sscanfgetcharcharfflushstdin

難しい方法でCを学ぶ(2015年)ゼッド・ショー著。賛否両論ある本。この本に対する批評ティム・ヘンテナール著:

以下に示す私の意見をまとめると、著者は内容を非常に単純化しすぎて誤解を招くような方法で提示しており、全体の内容は混乱しており、著者が提示する意見や分析の一部はまったく間違っています。私は初心者の目からこの本を見ようとしましたが、残念ながら C でコードを書いた長年の経験によって偏見を持っています。著者が C について誤った理解を持っているか、意図的に単純化しすぎて実際に読者を誤解させているかのどちらかであることは明らかです (意図的か否かは関係ありません)。

「Learn C The Hard Way」は、プログラミングと C の両方を学んでいる人にお勧めできる本ではありません。すでに他の関連言語で有能なプログラマーであれば、この本は C に関する興味深く珍しい解説となっていますが、一部に疑問を感じます。Jonathan Leffler


時代遅れ


改訂履歴に必ずしも記載されていないその他の貢献者には、次の者が含まれます。アレックス・ロックウッドベン・ジャクソンバブルコレドットダナ・ロビンソンダニエル・ホールデンデスベストダービン・サンクdwcエルシ・ホウガレンハジズヨハン・ベゼムジョナサン・レフラージョシュア・パルトギルーカスランディンマットK.モスプリックスマチュー M.ミドールニーチェ城ノーマン・ラムゼイr3st0r3自分を解放するロバート・S・バーンズスマリナックススティーブ・サミットティム・リングトニー・バイVMAtm

おすすめ記事