認知科学、教育心理学に基づき、効率よく学習でき、知識が確実に身に付くように工夫されたHead FirstシリーズのC言語バージョン。前半では文法、メモリとポインタ、make、データ型などC言語の基本をていねいに解説。後半では、プロセス間通信、ソケットとネットワーキング、スレッドといった高度な話題についても詳しく述べています。また、ArduinoのコードをCで書いて観葉植物をしゃべらせてみる、OpenCVを利用して自宅の防犯システムを作ってみる、アーケードゲームを作ってみる、という実用と趣味を兼ねた楽しい読みものも掲載。初心者からさらにCの知識を深めたい中上級者、日曜プログラマまで楽しめる一冊です。
Head First C
―頭とからだで覚えるCの基本
David Griffiths、Dawn Griffiths 著、中田 秀基 監訳、木下 哲也 訳
- TOPICS
- Head First , Programming , C/C++
- 発行年月日
- 2013年04月
- PRINT LENGTH
- 604
- ISBN
- 978-4-87311-609-9
- 原書
- Head First C
- FORMAT
- Print PDF
正誤表
書籍発行後に気づいた誤植や更新された情報を掲載しています。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷数をご確認の上、ご利用ください。
第1刷正誤表
Head First C
2013年4月25日更新
|
目次
序章
この本を読むのにふさわしい人は?
あなたがどう思っているかわかっています
メタ認知
脳を思い通りにさせるためにできること
初めに読んでね
テクニカルレビューチーム
謝辞
1章 Cを始める
Cは小規模で高速なプログラムのための言語
でも、完全な Cプログラムはどんなの?
でも、どうやってプログラムを実行するの?
2種類のコマンド
ここまでのコード
カードカウント? Cで?
ブール値は等価条件以外にもある……
現時点でコードはどうなっている?
スイッチに切り換える
一度だけでは不十分なこともある……
ループは同じ構造になることが多い……
中断するためには breakを使う……
Cツールボックス
2章 メモリとポインタ
Cコードにはポインタがある
メモリに踏み込む
ポインタを携えて出航する
変数へのポインタを渡すようにする
メモリポインタの利用
どのようにして関数に文字列を渡すの?
配列変数はポインタに似ている……
コードの実行時にコンピュータが考えること
しかし、配列変数は完全なポインタではない
なぜ配列は0から始まるの?
ポインタはなぜ型を持つの?
データ入力でのポインタの利用
scanf()には注意
fgets()がscanf()の代わりになる
文字列リテラルは決して書き換えられない
文字列を変更する場合はコピーする
メモリの暗記
Cツールボックス
2.5章文字列
フランクを探して
配列の配列を作成する
検索テキストを含む文字列を見つける
strstr()関数の使用
おさらいの時間
配列の配列とポインタの配列の比較
Cツールボックス
3章 小さなツールの作成
小さなツールは大きな問題を解決できる
プログラムが行うべき動作
でも、ファイルを使っていない……
リダイレクトを利用しよう
標準エラーとは
デフォルトでは、標準エラーは画面に送られる
fprintf()はデータストリームへ出力する
fprintf()を使ってコードを書き換えよう
小さなツールは柔軟性がある
geo2jsonツールを変更しない
異なるタスクには異なるツールが必要
入力と出力をパイプでつなぐ
bermudaツール
でも、複数のファイルに出力したい場合はどうなるの?
独自のデータストリームを使う
main()には別の使い方がある
ライブラリに仕事をしてもらう
Cツールボックス
4章 複数のソースファイルの使用
すぐわかるデータ型入門
小さなものに大きなものを入れてはいけない
整数をfloatに格納する
弱ったな……失業中の俳優だ……
コードがどうなったのか見てみよう
コンパイラは驚きたくない
定義から宣言を分離する
最初のヘッダファイルの作成
共通機能がある場合は……
コードを別のファイルに分割できる
コンパイルの舞台裏
共有コードには独自のヘッダファイルが必要
そんなに難しいことなの?
すべてのファイルを再コンパイルしない
まず、ソースをオブジェクトファイルにコンパイルする
ファイルの管理は難しい
makeツールでビルドを自動化する
makeの動作方法
コードに関することはmakefileを使ってmakeに知らせる
発射!
Cツールボックス
Cラボ1 Arduino
5章 構造体、共用体、ビットフィールド
多くのデータを扱わなければいけないこともある
オフィスでの会話
構造体を使って独自の構造化データ型を作成する
魚(fish)を渡す
「.」演算子を使って構造体のフィールドを読み取る
構造体を別の構造体に含められる?
構造体はどのように書き換えるの?
このコードは亀のクローンを作っている
構造体へのポインタが必要
(*t).ageと*t.age
同じ種類のものに異なる型のデータが必要な場合もある
共用体はメモリ空間を再利用できる
共用体はどのように使うの?
enum変数はシンボルを格納する
ビットレベルで制御したい場合もある
ビットフィールドは任意のビット数を格納する
Cツールボックス
6章 データ構造と動的メモリ
柔軟な記憶領域が必要か?
連結リストはデータの連鎖のようなもの
連結リストは挿入が可能
再帰構造体を作成する
Cで島を作成する……
リストへの値の挿入
動的記憶領域にはヒープを使う
使い終わったらメモリを返す
malloc()でメモリを要求する……
strdup()関数を使ってコードを修正しよう
使い終わったらメモリを解放する
SPIESシステムの概要
ソフトウェア科学捜査:valgrindの利用
valgrindを繰り返し使ってさらに証拠を集める
証拠を調べる
修正の確認
Cツールボックス
7章 高度な関数
理想的な相手を探す……
関数にコードを渡す
find()に関数の名前を伝える必要がある
関数名はすべて関数へのポインタである……
でも、functionデータ型はない
関数ポインタの作成方法
C標準ライブラリでソートする
関数ポインタを使って順序を設定する
返信の自動化
関数ポインタの配列を作成する
関数に伸縮性を持たせる
Cツールボックス
8章 スタティックライブラリと
ダイナミックライブラリ
銀行に持っていけるコード
山かっこは標準ヘッダに使う
でも、コードを共有したい場合はどうなるの?
.hヘッダファイルの共有
フルパス名を使って.oファイルを共有する
アーカイブには.oファイルがある
arコマンドでアーカイブを作成する……
最後に、他のプログラムをコンパイルする
ヘッドファーストジムがグローバルに展開中
カロリーの計算
でも、状況はもう少し複雑……
プログラムは多くの部品から作られる……
ダイナミックリンクは実行時に起こる
.aを実行時にリンクできる?
まず、オブジェクトファイルを作成する
ダイナミックライブラリの呼び名はプラットフォームによって
異なる
Cツールボックス
Cラボ2 OpenCV
9章 プロセスとシステムサービス
システムコールはOSへのホットライン
誰かがシステムに侵入した……
問題はセキュリティだけではない
exec() 関数を使えば、より詳細に制御できる
exec() 関数がたくさん
配列関数:execv()、execvp()、execve()
環境変数を渡す
ほとんどのシステムサービスは失敗したときに同じように
動作する
RSSでニュースを読む
exec()はプログラムの終点
fork()とexec()で子プロセスを起動する
Cツールボックス
10章 プロセス間通信
入力と出力のリダイレクト
典型的なプロセスの中を調べる
リダイレクションはデータストリームを置き換えるだけ
fileno()はディスクリプタを教えてくれる
待たなければいけないこともある……
子プロセスとの連絡を保つ
パイプでプロセスをつなげる
事例研究:ブラウザで記事を開く
子プロセスでは
親プロセスでは
ブラウザでWebページを開く
プロセスの死
シグナルを捕捉して独自のコードを実行する
sigactionはsigaction()で登録する
シグナルハンドラを使うようにコードを書き換える
killを使ってシグナルを送る
コードにモーニングコールを送る
Cツールボックス
11章 ソケットとネットワーキング
インターネットノックノックサーバ
ノックノックサーバの概要
BLAB:サーバがインターネットとやり取りする方法
ソケットは標準的なデータストリームではない
サーバが適切に開始しないことがある
なぜ常にエラーを調べるように言われるの?
クライアントからの読み込み
サーバは同時に1人しかやり取りできない
クライアントごとにプロセスをfork()できる
Webクライアントの記述
クライアントの担当
IPアドレスのソケットを作成する
getaddrinfo()はホストのアドレスを取得する
Cツールボックス
12章 スレッド
タスクは逐次的?
……プロセスでは必ずしも解決にはならない
単純なプロセスは一度に1つのことを行う
追加スタッフを雇う:スレッドの使用
どのようにスレッドを作成するの?
pthread_createでスレッドを作成する
このコードはスレッドセーフではない
信号機を追加する
ミューテックスを信号機として使う
Cツールボックス
Cラボ3 Blasteroids ゲーム
付録i 未収録事項
1.演算子
2.プリプロセッサディレクティブ
3.staticキーワード
4.データの大きさ
5.自動テスト
6.gccの詳細
7.makeの詳細
8.開発ツール
9.GUIの作成
10.参考文献