C言語は1972年にAT&Tベル研究所で開発されたプログラミング言語です。
「そんな古臭い言語、今時使うの?」と思う人もいるかもしれませんが、
- ハードウェアとの親和性の高さ
- メモリ管理などにおける自由度
- 処理速度の速さ
など利点も多くあり、今日では主に組込み系・機械制御系の分野で多く使用されています。
当ブログで独自に実施したプログラミング言語人気ランキングでも4位にランキングしており、根強い人気が伺えます。
今回の記事では、C言語を学習するのにおすすめの書籍を7冊紹介します。
- 【初級者向け】Cプログラミング入門以前
- 【初級者向け】はじめてのC
- 【初級者向け】独習C
- 【脱・初心者向け】C言語 入門書の次に読む本
- 【初級者~中級者向け】C言語ポインタ完全制覇
- 【中級者向け】C言語によるオブジェクト指向プログラミング入門
- 【中級者向け】効率の良い組込みC言語プログラミング
C言語講座
【初級者向け】Cプログラミング入門以前
プログラミングの完全初心者が最初に学ぶ言語としては、C言語は必ずしも適しているとは言えません。
C言語にはコンピュータを直接制御する強力な機能がありますが、逆に言えばコンピュータの仕組みに疎い人が使うには危険な言語ということです。
やる気のある人は、C言語の文法を学ぶ前にCプログラミング入門以前でまずはコンピュータの仕組みから学んでおくことをおすすめします。回り道に思えるかもしれませんが、プログラミングで食べていこうと考えている人にとっては必要な知識です。
【初級者向け】はじめてのC
C言語の入門書としては定番中の定番といっても良いのが本書です。僕も昔大学の講義でこの本使ってた覚えがあります。
変数や条件分岐といった基礎的な内容から低水準の入出力関数まで網羅していて、この本一冊でC言語の初級部分はあらかた学習することができます。図解が多いのも初心者にはわかりやすくて良いですね。
タイトル名が恥ずかしくて書店で買いづらいことを除けば、文句無しの良書。
【初級者向け】独習C
こちらも有名です。その名の通り、C言語を独学で学ぶための本。
- 解説
- 例題
- 練習問題
の3ステップでチュートリアル式に進めていけるので、理解しやすい構成となっています。
【脱・初心者向け】C言語 入門書の次に読む本
入門書で基本的な文法をマスターした人向けの、脱・初級者本です。
よく言われることですが、
「文法だけマスター」
↓
「実際に動くものを作る」
の間には壁があり、ここで脱落してしまう人も多いです。
本書では、初級者の人が詰まりがちな、
- ヘッダファイルの作り方
- ライブラリの作り方
- アルゴリズムやデータ構造の設計
- バグ発生時の対処法
- デバッグ用コード、エラー処理の書き方
といった実践的な内容が解説されています。
【初級者~中級者向け】C言語ポインタ完全制覇
C言語学習の最大の難関は、やはり「ポインタ」になるかと思います。ここでつまづいてC言語習得を諦めてしまう人も多いです。
C言語ポインタ完全制覇では、
「Cのポインタがわからないのは、あなたが悪いわけじゃなく、単に、Cの文法がクソなだけだよ!!」
とした上で、
- そのわかりにくいポインタを理解するにはどうすればいいのか
- 実際にポインタを実用的に使うには何に気を付ければいいのか
などなど、ポインタを中心に300ページ以上にわたって解説されている、まさにポインタのバイブル的存在です。
過去にポインタでつまづいてC言語習得を諦めた人や、C言語を仕事で使ってはいるけどポインタの理解が怪しい人など、初級者から中級者まで幅広くおすすめできる一冊です。
【中級者向け】C言語によるオブジェクト指向プログラミング入門
大規模なシステムを複数人で開発するとなると、オブジェクト指向プログラミングが必要な場面も出てきます。
C言語はオブジェクト指向プログラミングに適した言語とは言い難いですが、オブジェクト指向はシステム開発における考え方の1つなので、そのための機能が言語になくても実現することは可能です。
本書は、C言語を使ってオブジェクト指向開発を行う手法について解説されています。
【中級者向け】効率の良い組込みC言語プログラミング
前述したように、現代ではC言語の主戦場は組込み系開発*1です。
組込み系のソフトウェアは比較的シンプルなものが多いですが、組込み系開発独特の技術や知識、慣習が必要になってきます。
ハードウェアのリソース(CPUやメモリなど)が限られていることも多いため、いかにしてリソースを節約したプログラムを書くか、そこがミソになってきます。
本書では「限定されたハードウェア資源で動作するソフトウェア開発」というテーマについて書かれています。
*1:自動車や家電などに組み込んでハードウェアを制御するソフトを開発すること