美しいCプログラミング見本帖(柏原 正三)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. 美しいCプログラミング見本帖

美しいCプログラミング見本帖


形式:
書籍
発売日:
ISBN:
9784798106311
定価:
2,640(本体2,400円+税10%)
仕様:
A5・560ページ

さあ、自分のコードを書いてみよう

本書は、「真に実践的なコーディングを行うための“コーディングの手本”」を数多く提示するとともに、C言語において最も判りにくい部分と言われている「ポインタ」の使い方を、全体を通して指南した画期的なCプログラミングのTIPS集です。コーディング上の様々な悩みや疑問に対して解決策を具体的に提示してあります。その時々のニーズに応じてピンポイントで必要トピックを探せる紙面デザインを施してあり、とっても読みやすく使いやすく作ってあります。

第1章 さあ、いよいよ自分のコードを書いてみよう!

Cプログラムの拡張子は?
main()関数とは?
EOFって何?~壊れた関数ブロック
つぶれたケーキは食べられない!~字下げ
道路工事するなら標識を立てよう!~コメント
よくあるコメントの間違い~コメントの入れ子
むだな苦労はやめよう~発見しにくい全角の空白文字
しまりのない文の記述をやめよう
関数を使うならライブラリヘッダーをインクルードしよう
includeの<>と''''はどう違うの?
正しいコマンドライン引数を取得しよう
正しい方法でプログラムを終了しよう
printf()関数を使いこなそう

第2章 型とキーワードと変数の取り扱いに慣れる

型やキーワードはすべて小文字で書こう
変数名の規則は?
変数は必ず初期化しよう
変数の宣言や初期化文を整理しよう
Cプログラムで数値を記述するには?
char型の配列を正しく初期化するには
char型の配列を長い文字列で初期化するには
変数が隠れてしまった!
変数が使えないのはなぜ?
文字と文字列を正しく使い分けよう

第3章 演算子と条件処理に慣れる

条件が評価される順番を考える
プログラムがおかしくなったのはなぜ?
変数をインクリメントできないのはなぜ?
左辺値となれない式ってあるの?
むだのないif文を書こう
不明瞭なifとelseの対応に気をつけよう
おかしい?if-else文が機能しない~条件記述
なぜいつも同じ数値になるのだろう?=と==
冗長なif-else文 1~switch文が使える
冗長なif-else文 2~条件演算子が使える
switch/caseのポイント 1~整数定数
switch/caseのポイント 2~break文

第4章 ループの制御に慣れる

プログラムに定数を埋め込むのはやめよう!~#define
なぜ1から始めてはいけないの?
ループでは絶対に防ごう~境界越え
どうしよう、ループが止まらない~終了条件の不備
ループが変だ!~制御変数の初期化忘れ
無限ループを活用しよう~ループの脱出
あてにならない遅延ルーチン
whileループのよくある間違い~制御変数の更新忘れ
うまく抜けられないループ~入れ子のループ
goto文を使うのはやめよう~構造化プログラミングになじまない

第5章 配列と文字と文字列の取り扱いに慣れる(ポインタ:その1)

文字列の長さを求めるポイント~ヌル文字
ポインタ操作のポイント 1~ポインタの初期化
ポインタ操作のポイント 2~ポインタ参照先の初期化
文字列を連結するポイント 1~ヌル文字
文字列を連結するポイント 2~十分なサイズ
文字列を連結するポイント 3~strncat()関数
文字列をコピーするポイント 1~ヌル文字
文字列をコピーするポイント 2~strncpy()関数
文字列を比較するポイント~ヌル文字
おかしい、半角カナが取り扱えない~char型の問題
漢字を使えない標準関数ってあるの?
おかしい、入出力をリダイレクトできない
多次元配列のよくある間違い~不明瞭な初期化
ポインタ操作のポイント 3~値とアドレスの違い
ポインタ操作のポイント 4~文字列のソート

第6書 整数と浮動小数点数とビットの取り扱いに慣れる(ポインタ:その2)

printf()関数がおかしい!~演算子の右結合
ポインタ操作のポイント 5~アドレスの取り扱い
異なるデータ型間の代入には気をつけよう~データの喪失
明示的な型キャストには気をつけよう~警告がなくなる
加減乗除演算子の優先順位に注意しよう
科学的表記法を使うには?
ビット演算子を使ったら整数の符号が変わってしまった
ビットの取り扱いに強くなろう
Cの整数型とコンピュータの数値のしくみを理解しよう
16ビット環境と32ビット環境のint型にうまく対応したい~移植性の問題

第7章 関数の取り扱いに慣れる(ポインタ:その3)

関数定義のポイント 1~変数の寿命を理解しよう
関数定義のポイント 2~型を指定しよう
関数定義のポイント 3~プロトタイプを宣言しよう
関数定義のポイント 4~外部宣言を使おう
関数定義のポイント 5~引数と戻り値の値渡し
関数定義のポイント 6~引数と戻り値の参照(ポインタ)渡し
ポインタ操作のポイント 6~実体のない戻り値ポインタ
変だ!再帰関数を正しく終了できない~再帰関数の折り返し
累乗値を求める関数の計算がおかしい~再帰関数の初期化
関数定義のポイント 7~共通ルーチンの取り扱い

第8章 構造体の取り扱いに慣れる(ポインタ:その4)

構造体を上手に使おう
構造体変数をうまく宣言しよう
構造体名は型として使えないの?
ポインタ操作のポイント 7~char型の配列とchar *型の変数
ポインタ操作のポイント 8~なぜ途中からアロー演算子が使えなくなるの?
構造体のビットフィールドを活用しよう
不完全なビットテスタ~列挙の名前付き定数を使う

第9章 動的なメモリ割り当てに慣れる(ポインタ:その5)

ポインタ操作のポイント 9~NULLポインタの取り扱い 1
ポインタ操作のポイント 10~void *型のポインタの型キャスト
ポインタ操作のポイント 11~ポインタのコンパスの違いを理解する
ポインタ操作のポイント 12~void *型のポインタの上手な使い方
ポインタ操作のポイント 13~ポインタ参照先の初期化 2
メモリ領域をコピーするには?
ポインタ操作のポイント 14~NULLポインタの取り扱い 2
ポインタ操作のポイント 15~関数ポインタ
動的なリンクリストを作るには?

第10章 ファイルの取り扱いに慣れる(ポインタ:その6)

ポインタ操作のポイント 16~NULLポインタの取り扱い 3
環境に依存しない関数を使うのはやめよう~ファイルサイズ
fgets()関数の動作がおかしいのは?
なぜコピーしたファイルのサイズが違う?~サイズ指定
変だ!最終行がうまく表示できない~よくある問題
ポインタ操作のポイント 17~ポインタを永久保存してはいけない
可変長レコードをランダムアクセスするには?

付属データはこちら

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

追加情報はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2006年03月31日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 119
下から2行目
この関数は、2つの文字列が一致すればゼロを返し、最初の文字列が小さければの値を、最初の文字列が大きければの値を返します。
この関数は、2つの文字列が一致すればゼロを返し、最初の文字列が小さければの値を、最初の文字列が大きければの値を返します。
2006.03.31
1刷 140
下から12行目
(n1 < n2 ? n1:n2) > (n2 < n3 ? n2:n3)
(n1 < n2 ? n1:n2) < (n2 < n3 ? n2:n3)
2004.11.06
1刷 187
下から3行目
~2学年の最初の「組」(実はこれも1学年となります)にアクセスするときに発生する「配列の境界越えアクセス」です。初期化を忘れているため、このときjが6となってしまいます。~
~iの値が0、jの値が6のままで外側のループがもう一度実行され(この時、goukeiとkumisuuの値がゼロにリセットされる)、内側のループをとばしてprintf()関数が実行され、「goukei / kumisuu」がゼロ除算となってしまうからです。~
2004.11.01
1刷 198
コラム:下から4行目
math.hヘッダー~
stdlib.hヘッダー~
2004.04.23
1刷 232
下から3~4行目
…最初の文字列が小さければ正の値を、最初の文字列が大きければ負の値を返します。
…最初の文字列が大きければ正の値を、最初の文字列が小さければ負の値を返します。
2005.08.22
1刷 266
上から1行目
printf()関数がおかしい!~演算子の右結合
printf()関数がおかしい!~関数の実装
2004.11.06
1刷 266
上から3行目
右結合の演算子を使う場合は通常とは逆順で引数を指定する
前置形式の演算子を引数指定する場合は実装に合わせる
2004.11.06
1刷 267
下から14行目
問題は、前置形式のインクリメント演算子とデクリメント演算子が、ともに右結合の演算子であることです(95ページの表「Cの演算子の優先順位と結合規則」を参照)。
問題は、このケースのように、関数の引数評価を右側から左側へと進行させる処理系の実装が存在することです。
2004.11.06
1刷 267
下から9行目
~、より一般的な左結合であるため、問題なく処理されることにも留意してください。
~、関数による引数評価の後で演算が行われるので問題なく処理されます。
2004.11.06
1刷 268
上から1行目
~、インクリメント/デクリメント演算子が右結合の演算子であることが原因です。
~、引数評価を右側から左側へと進行させる関数の実装が存在することが原因です。
2004.11.06

感想・レビュー

とち さん

2011-11-28

BADなサンプルコードに対して、どこに問題があるのか、そしてどう修正すれば良いのかが丁寧に解説されていて分かりやすい。厚めの本ですがC言語で開発を行ったことがある人であれば、テンポ良くサクサクと読み進められると思います。久しくC言語に触れていなかったので良い復習になりました。

yasuhitoakita さん

2021-02-01

再読。