Akio's Log

ソフトウェア開発、プロジェクトマネジメント、プログラミング、ランニングなどなど

プログラミングの禁じ手Web版 C言語編(InternetArchiveよりサルベージ)

はじめに

昔お世話になったC Magazineの「プログラミングの禁じ手Web版 C言語編」というサイトを、後輩に教えてあげようとしたら、C Magazineの休刊後にドメインが失効してしまったようで、見る事が出来ませんでした。

幸い、InternetArchive(http://www.archive.org/web/web.php)
に当時のデータがほぼ残っていたので、無許可ではありますがサルベージして転載させてもらいました。


C MAGAZINE - プログラミングの禁じ手Web版 C言語編」
元のアドレスはこちら。
http://www.cmagazine.jp/src/kinjite/c/index.html
InternetArchive
http://web.archive.org/web/20070113222026/http://www.cmagazine.jp/src/kinjite/c/index.html



(PR)プログラミング作法
(PR)C言語ポインタ完全制覇 (標準プログラマーズライブラリ)
(PR)改訂新版 Cプログラミング診断室


ここから転載です。


プログラミングの禁じ手Web版について

本誌2000年4月号に掲載された「特集1 プログラミングの禁じ手 C言語編」よりWebサイト用に抜粋したものです。ソースコードとともに公開いたします。作者の真紀俊男様に感謝します。

 プログラミングは,「なぜかうまく進めなくなる」,「だんだんと期待した通りに動かなくなる」など,とても「イヤ」な面があります。そうした現実に直面したときに本稿がお役に立てれば幸いです。

一覧

[コメントに関するパターン]
  • コメントがない
  • コメントに嘘がある
  • コメントが意味不明
  • コメントが英語

プログラミングの禁じ手Web版 C言語編 - コメントに関するパターン(サルベージ版) - Akio’s Log

[NULLに関するパターン]
  • NULLとゼロを間違える
  • NULL領域を読み書きする

プログラミングの禁じ手Web版 C言語編 - NULLに関するパターン(サルベージ版) - Akio’s Log

[過去をひきずるパターン]
  • 関数プロトタイプ宣言をしない
  • 構造体の直接代入を使わない
  • 「void *」を使わない

プログラミングの禁じ手Web版 C言語編 - 過去をひきずるパターン(サルベージ版) - Akio’s Log

[変数に関するパターン]
  • 自動変数の不定値を使う
  • グローバル変数が多い(外部変数が多い)
  • 引数を使わずにグローバル変数を使う
  • 構造体にまとめないでバラバラの変数にする
  • 引数の数が多い
  • 割り込みやスレッドで共用する変数をvolatileにしない
  • ポインタと配列を混同している
  • 文字列を格納する配列のサイズが小さい
  • 自動変数をポイントして,それを関数の戻り値にする
  • 解放したものを使う
  • 変数の数をケチって共有する

プログラミングの禁じ手Web版 C言語編 - 変数に関するパターン(サルベージ版) - Akio’s Log

[分量に関するパターン]
  • ひとつの関数の行数が多すぎる
  • 共通部分をまとめない
  • 「入れ子」のレベルが深すぎる
  • 構造体のメンバの数が多い
  • 構造体の入れ子のレベルが深い
  • 1ファイル1関数主義にこだわる

プログラミングの禁じ手Web版 C言語編 - 分量に関するパターン(サルベージ版) - Akio’s Log

[記述テクニックに関するパターン]
  • インデントを付けない平坦なコーディング
  • 数値を直接コードに埋める
  • if(XXX == TRUE)
  • 掛け算の*とポインタ,-と--を判別しにくいようにわざと並べて記述する
  • float,double型の値と数値との比較を==のみで行う
  • 無節操なgotoの使用
  • break,continueの悪用
  • キャストの悪用
  • わかりにくい変数名や関数名を使う

プログラミングの禁じ手Web版 C言語編 - 記述テクニックに関するパターン(サルベージ版) - Akio’s Log

[直接コーディングに関しないパターン]
  • warningを無視する
  • stdio.hと同じディレクトリにプライベートヘッダを置く
  • 構造体のパッキングを無視する
  • エンディアンの存在を無視する
  • ポインタをlong型変数で保持できると決めつける
  • 巨大な領域を静的に確保する

プログラミングの禁じ手Web版 C言語編 - 直接コーディングに関しないパターン(サルベージ版) - Akio’s Log