C言語逆引き大全 500の極意

概 要

本書は、すべてのCプログラマ/開発者に贈る“C言語百科事典”です。Windowsはもとより、Linuxでのプログラミングに役立つ情報も満載しています。基本的な文法事項を徹底的にフォローするのはもちろん、アルゴリズム、ポインタ、グラフィックス、マルチスレッド正規表現、ネットワークなど、身に付けておきたいトピックもあますところなく盛り込みました。

著者 平田豊
価格 本体3000円(税別)
ISBN 4-7980-0647-5
発売日 2003/11/28
判型 A5
色数 2色
ページ数 896
CD/DVD
対象読者 中級
シリーズ 逆引き大全
表紙イメージ
購入 アマゾンで購入する

※リンク先によっては、販売ページが用意されていないことがあります。 あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

サンプルプログラムのダウンロード

第1部 エッセンシャル・プログラミングの極意

第1章 C言語文法ひとめぐり

1-1 C言語の由来

1 そもそもC言語とは

2 どうしてC言語というネーミングなの?

1-2 プログラムの書き方

3 最初のプログラム

4 プログラムの構成

5 コメント

6 すべての始まり

7 コマンドライン引数を受け取る

8 環境変数を取得する

1-3 変数の扱い方

9 文字定数

10 文字列リテラル

11 変数のデータ型

12 変数のスコープ

13 予約語

1-4 C言語特有の機能

14 ヘッダファイル

15 プリプロセッサ

16 演算子の優先順位

17 関数

18 構造体と共用体

19 コーディングスタイル

1-5 制御構文のしくみ

20 制御構文─分岐

21 制御構文─ループ

第2章 コンパイラの使い方

2-1 コンパイラの存在

22 コンパイラとは

23 Visual C++の入手

24 Visual C++のインストール

2-2 コンパイルの仕方

25 総合開発環境上でのコンパイル

26 プロジェクト

27 プロジェクトへのソースファイルの追加

2-3 プログラムの記述

28 プログラムの入力

29 インデント

30 インデントを変更する

31 インデントをそろえる

32 コードの折りたたみ(アウトライン)

33 中かっこのインデント

34 行番号を付ける

2-4 ビルドとデバッグ

35 ビルド

36 ビルドでエラーが出た①

37 ビルドでエラーが出た②

38 プログラムの実行①

39 プログラムの実行②

40 引数を渡して実行

41 リリースモードとデバッグモード

42 デバッガが起動されるしくみ

43 デバッガの起動①

44 デバッグとプログラムの種類

45 デバッガの起動②

46 デバッガの起動③

2-5 開発ツールの利用

47 ヘルプの使い方

48 便利なショートカットキー

49 付属ツール

50 コマンドラインからのコンパイル

2-6 C++Compilerの使い方

51 C++Compilerの入手

52 C++Compilerのインストール①

53 C++Compilerのインストール②

54 C++Compilerのインストール③

55 C++Compilerのインストール④

56 コンパイラの起動確認

57 コンパイルの仕方

58 拡張キーワード

59 付属ツール

2-7 gccの使い方

60 gccとは

61 gccの入手(Linuxの場合)

62 gccの入手(Windowsの場合)

63 Cygwinの終了方法

64 Cygwinコンソールウィンドウでコピー&ペーストする

65 Linux上で実行結果を取得する

66 コンパイルの仕方

67 gccと拡張子の関係

68 プログラムの実行方法

第3章 開発ツールの使い方

3-1 ソースコードの整形

69 インデントをきれいにそろえる①

70 インデントをきれいにそろえる②

3-2 関数プロトタイプ宣言

71 関数プロトタイプ宣言の作成(Linuxの場合)

72 関数プロトタイプ宣言の作成(VC++の場合)

73 複雑な宣言に遭遇した!

3-3 関数および変数のサーチ

74 関数や変数の宣言へジャンプする(Visual Studioの場合)

75 関数や変数の宣言へジャンプする(viの場合)

76 関数や変数の宣言へジャンプする(emacsの場合)

3-4 ソースコードの統計

77 ソースコードの行数を数える①

78 ソースコードの行数を数える②

79 人月を計算する

80 条件コンパイル文の除去

3-5 プリプロセッサ

81 プリプロセス結果を参照する(VC++編)

82 プリプロセス結果を参照する(BCC++編)

83 プリプロセス結果を参照する(gcc編)

84 プログラムの統計を取る

85 プロジェクトを効率的に管理する

3-6 make

86 makefileの書き方①

87 makefileの書き方②

88 makefileの書き方③

89 makefileの書き方④

90 makefileの書き方⑤

91 makefileの書き方⑥

92 makefileの書き方⑦

93 makefileの書き方⑧

94 makefileの書き方⑨

95 makefileの書き方⑩

96 makeの使い方(VC++編)

97 Visual Studio上でmakeを使う

98 nmakeのオプション

99 makeのそのほかの機能(VC++編)

100 makeの使い方(BCC++編)

101 makeのオプション(BCC++編)

102 独自のmakeを作る(BCC++編)

103 makeのそのほかの機能(BCC++編)

104 makeの使い方(gcc編)

105 makeの実行(gcc編)

106 gmakeのドキュメント

107 gmakeのオプション

108 gmakeのそのほかの機能

109 makefileの自動生成①

110 makefileの自動生成②

111 makefileの自動生成③

112 makefileの自動生成④

113 makefileの自動生成⑤

114 makefileの自動生成⑥

115 makefileの自動生成⑦

116 makefileの自動生成⑧

117 gccの内部処理(Linux編)

3-7 デバッグ手法

118 ワトソン博士とは

119 ワトソン博士を使ってデバッグする

120 ワトソン博士のログを見る

121 Windowsでクラッシュダンプ解析をする

122 Windows Debuggerのコマンド

123 ブルースクリーンとは

124 ブルースクリーンの読み方

125 ブルースクリーン画面を停止させる

126 意図的にブルースクリーンを発生させる

127 クラッシュダンプの採取(Windows編)

128 クラッシュダンプの解析(Windows編)

129 デバッガ(Turbo Debugger)とは

130 Turbo Debuggerを使う前準備

131 Turbo Debuggerの設定をする

132 Turbo Debuggerを使う

133 Turbo Debuggerで変数の監視をする

134 coreとは(Linux編)

135 coreを意図的に作る

136 coreを調べる

137 gdbでスタックトレースを表示する

138 gdbで変数の値を表示する

139 gdbでブレークポイントを設定する

140 gdbでよく使われるコマンド

141 DDDとは

142 panic画面の読み方(Linux編)

143 Oopsメッセージを解析する

144 カーネルデバッガを使う

145 kdbの起動

146 kdbを使ってみる

147 クラッシュダンプの採取と解析(Linux編)

148 LKCDを利用できるようにする①

149 LKCDを利用できるようにする②

150 LKCDを利用できるようにする③

151 LKCDを利用できるようにする④

152 LKCDを利用できるようにする⑤

153 LKCDを利用できるようにする⑥

154 クラッシュダンプの解析

第4章 数学とグラフィックス

4-1 数学関数の使い方

155 数学ライブラリを利用する

156 浮動小数点演算のバグ?

157 浮動小数点の誤差を目視する

158 doubleとfloatの比較①

159 doubleとfloatの比較②

4-2 浮動小数点のしくみ

160 浮動小数点のフォーマット

161 浮動小数点のフォーマットを出力する

162 誤差なく表現できる浮動小数点とは

163 浮動小数点を誤差なく計算する

164 基本的な数学関数の一覧

4-3 Windowsアプリケーションのしくみ

165 コンピュータグラフィックス

166 アプリケーションプログラムの作り方

167 ウィンドウクラスの登録

168 ウィンドウの出現方法

169 ウィンドウの描画

170 メッセージループ

171 ウィンドウプロシージャ

172 アプリケーションプログラムのコンパイル方法

4-4 グラフィックスの描画

173 図形を描画する

174 色を付ける

175 図形を描くプログラム

176 WinMain()とmain()の混在

4-5 ビットマップの扱い方

177 ビットマップ画像をロードする

178 インスタンスのハンドルの取得

179 ビットマップの読み込み

180 メモリデバイスコンテキストの作成とビットマップ画像とのバインド

181 ビットマップ画像の画面への転送

182 ビットマップ画像をロードするプログラム

4-6 画像処理のしくみ

183 画像処理を行うために必要なこと

184 画像を濃淡化する

185 画像を反転する

186 画像をモザイク化する

187 画像処理を行うプログラム

4-7 グラフィックエフェクト

188 雲を作り出す

189 球を描く

190 球に光を照らす

191 バラ曲線を描く

192 リサージュ曲線を描く

4-8 動くグラフィックエフェクト

193 メタボール

194 画面のちらつきを防止する

195 アニメーションさせる

196 フレームレートの計算方法

197 メタボールを実装する

第5章 文字と文字列

5-1 文字のしくみ

198 文字

199 charのビット数

200 charの符号

201 charのサイズに注意

202 文字定数の型

203 文字定数に日本語を指定する

204 ASCIIコードの出力

205 文字の判別

206 文字の判別(拡張編)

5-2 ワイド文字のしくみ

207 ワイド文字

208 ロケール

209 ワイド文字からバイト列への変換

210 半角カナのバイト数

5-3 文字列のしくみ

211 文字列

212 文字列の定義

213 配列による文字列の書き換え

214 ポインタによる文字列の書き換え

215 メモリ属性を変更する

216 文字列表示の仕方

5-4 文字列の操作

217 文字列の長さを取得する

218 sizeof()の落とし穴

219 配列のサイズを自動取得

220 文字列のコピー

221 メモリ領域のコピー

222 bcopy()とは

223 文字列の連結

224 文字列の比較

225 大文字・小文字を無視した文字列の比較

226 文字列から文字の検索

227 文字列から文字列の検索

5-5 文字列と数値の相互変換

228 文字列を数値に変換する

229 文字列を数値にまともに変換する

230 数値を文字列に変換する

第6章 アルゴリズムとコンピュータパズル

6-1 パズルに利用できるアルゴリズム

231 コンピュータパズルとは

232 ユニークな数値の組み合わせを求める

233 9の倍数であるかを判別する

234 大きな数値同士の加算を行う

235 分数の足し算

236 素数の判別

237 平方根を求める①

238 平方根を求める②

239 三角形の面積

240 分布数えソートとは

6-2 数を扱うパズル

241 数式を使ったパズル

242 魔方陣を使ったパズル

243 ペンシルパズルをコンピュータで解く

244 8パズルを解く

245 アナログ時計のパズル

6-3 図形パズル

246 ピースの箱詰め

247 テトロミノの箱詰めパズル

248 テトロミノの箱詰めパズルを解く①

249 テトロミノの箱詰めパズルを解く②

250 ペントミノの箱詰めパズル

251 ソースコードの差分を取る

第2部 アドバンスト・プログラミングの極意

第7章 入出力処理

7-1 標準出力

252 printfのバグ?

253 printf()

254 拡張版printf()

7-2 可変引数

255 可変引数を持つ関数①

256 可変引数を持つ関数②

257 可変引数を持つ標準ライブラリ関数

7-3 標準エラー出力

258 標準I/Oストリームとは

259 標準エラー出力のリダイレクトは可能か

260 ファイルハンドル番号

261 リダイレクトされないコンソール出力

7-4 文字および文字列の入出力

262 文字/文字列の出力

263 書式付き標準入力

264 バッファのフラッシュ

265 文字の入力

266 文字列の入力

267 漢字を含めると表示がバグる?

268 リダイレクトされないコンソール入力

269 バッファへの書式付き出力①

270 バッファへの書式付き出力②

271 バッファからの書式付き入力

272 printfデバッグとは

7-5 ファイルの入出力

273 ファイルのオープンとクローズ

274 テキストとバイナリの違い

275 標準出力をバイナリモードにする

276 ファイルの一括クローズ

277 低水準のファイルオープンとクローズ

278 ファイルを削除する

279 ファイルへの文字I/O

280 ファイルへの文字列I/O

281 ファイルへのブロックI/O

282 ファイルポインタのシークと取得

283 ファイルのリネーム

284 テンポラリファイルを作る

第8章 様々な標準ライブラリ関数

8-1 プログラムの終了方法

285 プログラムの終了

286 終了ステータスの参照方法

287 正常終了時に関数を呼び出す

288 正常終了時に引数付きで関数を呼び出す

289 プログラムの診断

8-2 エラー検出

290 エラーメッセージを出力する

291 errnoは本当にグローバル変数か?

292 ファイルの終端を判別する

293 ストリームのエラーを検出する

8-3 外部プログラム

294 外部プログラムの起動

295 外部プログラムとの置き換え

296 外部プログラムの呼び出しを柔軟に行う

8-4 時間の扱い方

297 秒単位で時間を計測する

298 プロセッサ時間を計測する

299 日時の設定を行う(Windows編)

300 日時の設定を行う(Linux編)

301 経過秒数から日時へ変換する

302 乱数を生成する

8-5 メモリの扱い方

303 メモリの確保

304 メモリの解放

305 アライメントを意識したメモリの確保

306 メモリの再確保

8-6 そのほかの機能

307 よく使われる規定マクロ

308 構造体メンバのオフセットを計算する

309 ソースコードを出力するソースコード

310 関数間ジャンプする

第9章 ポインタ・配列・構造体

9-1 ポインタのしくみ

311 ポインタとは

312 ポインタ変数の他の定義

313 void型のポインタ変数とは

314 NULLとは

315 NULLの定義内容

316 ポインタにむりやりアドレスを格納する

317 ポインタにまじめにアドレスを格納する

318 ポインタのポインタ

9-2 配列のしくみ

319 ポインタ配列

320 配列名に&を付けると

321 配列の一括コピー①

322 配列の一括コピー②

9-3 構造体のしくみ

323 構造体のメンバ

324 配列と添え字は交換可能

325 関数で配列を返す①

326 関数で配列を返す②

327 関数で配列を返す③

328 関数で配列を返す④

329 関数で配列を返す⑤

330 ポインタ変数の参照渡し①

331 ポインタ変数の参照渡し②

9-4 ポインタと配列

332 ポインタと配列の読み替え

333 配列のextern宣言①

334 配列のextern宣言②

335 配列のextern宣言③

9-5 関数とポインタの関係

336 関数ポインタ

337 関数テーブル

338 ポインタの演算

339 負数の添え字

340 ポインタのポインタと2次元配列

341 構造体内の可変長配列①

342 構造体内の可変長配列②

第10章 gcc拡張機能で見るC99の新機能

10-1 gcc拡張機能

343 gcc拡張機能とは

344 gcc拡張機能を抑止する

10-2 様々な拡張機能

345 タグ付き構造体

346 式の中の文と宣言

347 型への参照

348 条件演算子

349 64ビット整数

350 配列のサイズ指定

351 マクロの引数

352 マクロの複数行連結

353 文字列リテラル

354 コード中に宣言文を置く

355 C++風コメント

356 インラインアセンブラ

357 ローカルなラベル

358 ラベル値

359 ネスト(入れ子)関数

360 一般化された左辺値

361 16進数の浮動小数点

362 配列の可変サイズ指定

363 voidポインタの演算

364 定数以外の初期値

365 配列の明示的な初期化

366 switch文のcaseラベルでの範囲指定

367 関数への属性宣言

368 旧式の関数定義とプロトタイプ宣言

369 識別子への$の使用

370 エスケープコード

371 インライン関数

372 構造体のメンバを詰める

373 タグ名なしの構造体および共用体

第11章 高度なトピック

11-1 Windowsでのマルチスレッド

374 マルチスレッドとは

375 Windowsプログラムでスレッドを生成する

376 Windowsプログラムでスレッドを終了する

377 1つのスレッドの終了を待ち合わせる(Windows編)

378 複数のスレッドの終了を待ち合わせる(Windows編)

379 スレッドの実行を中断するには(Windows編)

380 Windowsプログラムでマルチスレッドを使う

381 コンソールプログラムでスレッドを生成する(Windows編)

382 コンソールプログラムでスレッドを終了する(Windows編)

383 スレッドハンドルを閉じる(Windows編)

384 スレッドの優先度を調整する(Windows編)

385 プロセスの優先度を調整する(Windows編)

386 プロセスハンドルを取得する(Windows編)

387 プロセスIDを取得する(Windows編)

388 コンソールプログラムでマルチスレッドを使う

389 マルチスレッドを使うメリット(Windows編)

390 マルチスレッドを使うメリット~正解~

391 スレッド関数に複数のパラメータを渡す

392 Windowsプログラムでのコマンドライン引数の受け取り

393 排他制御のしくみ①(Windows編)

394 排他制御のしくみ②(Windows編)

395 排他制御のしくみ③(Windows編)

11-2 Linuxでのマルチスレッド

396 Linuxでマルチスレッドを利用する

397 スレッドを生成する(Linux編)

398 スレッド属性の種類(Linux編)

399 マルチスレッドオブジェクトの初期化(Linux編)

400 マルチスレッドオブジェクトの破棄(Linux編)

401 排他制御のしくみ(Linux編)

402 スレッド関数の終了(Linux編)

403 1つのスレッドの終了を待ち合わせる(Linux編)

404 Linuxでマルチスレッドを使う

11-3 正規表現

405 正規表現

406 正規表現で使われるメタ文字

407 プログラムで正規表現を使う場合の注意事項

408 Visual C++で正規表現を使う①

409 Visual C++で正規表現を使う②

410 Visual C++で正規表現を使う③

411 Visual C++で正規表現を使う④

412 Visual C++で正規表現を使う⑤

413 C++Builderで正規表現を使う①

414 C++Builderで正規表現を使う②

415 C++Builderで正規表現を使う③

416 C++Builderで正規表現を使う④

417 C++Builderで正規表現を使う⑤

418 C++Builderで正規表現を使う⑥

419 C++Builderで正規表現を使う⑦

420 gccで正規表現を使う①

421 gccで正規表現を使う②

422 gccで正規表現を使う③

11-4 ライブラリ

423 ライブラリの基礎知識①

424 ライブラリの基礎知識②

425 ライブラリの基礎知識③

426 シェアドライブラリを作ってみる①

427 シェアドライブラリを作ってみる②

428 ライブラリの基礎知識④

429 ダイナミックライブラリ

11-5 算術型変換

430 通常の算術型変換①

431 通常の算術型変換②

432 コードクリーン

11-6 ネットワークプログラミング

433 ネットワークプログラミングのススメ

434 ソケットのためのAPI

435 ソケットインタフェイス①

436 ソケットインタフェイス②

437 ネットワークバイトオーダー

438 インターネットアドレスの操作

439 ソケットの生成

440 WinSockの初期化と終了

441 クライアント・サーバ型プログラム

442 ソケットに名前を付ける

443 ソケットを受動モードにする

444 クライアントからの接続を待つ

445 サーバへ接続する

446 パケットの送信を行う

447 パケットの受信を行う

448 ソケットを閉じる

449 行儀のよいクローズ

450 クライアント・サーバ型のネットワークプログラム(Windows編)

451 クライアント・サーバ型のネットワークプログラム(Linux編)

452 selectとは

11-7 パケットキャプチャ

453 パケットキャプチャとは

454 ソケットをRAWモードにする(Linux編)

455 ソケットをRAWモードにする(Windows編)

456 NICをpromiscuousモードにする①(Linux編)

457 IOCTLとは

458 NICをpromiscuousモードにする②(Linux編)

459 promiscuousモードにする上での注意点

460 NICをpromiscuousモードにする(Windows編)

461 パケットの解析

462 パケットキャプチャを実装する

11-8 シグナル

463 CTRL+Cを捕捉する(Linux編)

464 CTRL+Cを捕捉する(Windows編)

11-9 IPv6ネットワークプログラミング

465 IPv6プログラミングのキモ

466 getaddrinfo()とは

467 freeaddrinfo()とは

468 IPアドレスを文字列にする(Windows編)

469 IPv6のサポート状況

470 IPv6環境の構築

471 IPv6のアドレス体系

472 IPv6のループバックアドレス

473 実践! IPv6プログラミング

11-10 システムコール

474 インタバルタイマ

475 シグナルを受け取る

476 プロセスを休眠させる

477 インタバルタイマを実装する

478 プロセスの生成

479 コピーオンライトとは

480 子プロセスの終了を待つ

481 fork()を使ったプログラムの書き方

482 プロセス生成ですれ違いが起こると?

483 psコマンドの意味

11-11 IPC

484 プロセス間通信

485 共有メモリセグメントの割り当て

486 共有メモリセグメントのアタッチ

487 共有メモリセグメントのデタッチ

488 共有メモリセグメントIDの破棄

489 共有メモリを実装してみる

490 共有メモリセグメントのIDを破棄し忘れると?

491 プロセス間での排他制御

492 セマフォの使い方

493 ftok()の使い方

494 セマフォIDを取得する

495 セマフォの初期値を設定する

496 P操作もしくはV操作を行う

497 セマフォIDを破棄する

498 セマフォを使ったプログラムを作る

499 FIFOとは

500 FIFOを使ったプログラム

COLUMN

コメント? 割り算?

fooとbarってナニ?

32ビットから64ビットへの移植

MSDNとは?

READMEってなによ?

C++Compilerをお手軽にインストール

オープンソースソフトウェアとは?

RPMを探すには?

vimでローカル変数宣言へ飛ぶ

Windowsで標準エラー出力をリダイレクトするには?

MS-DOSプロンプトのコマンドヒストリ

ブルースクリーン実践例?

Lena画像

オクテット

キリのいい数字

倍数判定

sqrt()のバグ?

空白を含むファイルへアクセスするには?

システムの日時を正しく合わせるには?

死肉?

メモリの解放は本当に必要?

C99とは?

規格を意識したコンパイル方法

関数プロトタイプ宣言は必須

増えた予約語

forループ

列挙型のカンマ

関数名

エスケープシーケンス

~ex()というネーミング

コマンドラインの履歴

promiscuousモード

索引

PR

秀和システム