「C言語入門書の次に読む本」を読んだので勉強になったことなどのメモ。
バグを出さないために
1.1つのローカル変数を複数の目的に使用しない
めんどくさくても、新しく変数を宣言して使用することで、デバック時、拡張時など結果的に時間短縮につながる。
2.関数の引数を複数の目的に使用しない
3.malloc()とfree()はセットでできるだけ近くに書く
malloc()で動的に確保されたメモリ領域はアプリケーションの終了とともにOSにより解放されるが、メモリリークを避けるためにできる限り使用しなくなった時点でfree() を使いメモリ領域を開放する。メモリ開放箇所は他人から見た場合わかりにくいものなので必要に応じてコメントを記述する。二重開放をすると意図しないメモリ領域が開放されてしまうので注意する。
4.構造体は作成すると同時に初期化する
初期化を行って返す関数にまとめる。同時に消去用の関数も作成する。nameset()は環境依存であるが、簡素に書くことができる。
5.関連のあるコードは近くに置く
追加忘れなどを防ぐことができる。
6.キャストは少なく/多く
コンパイラの持つ型チェック機能を無効にしてしまうので。必要最低限に。必要であれば明示的に書くべき。
(例)徐算を行うとき。
a+=1.0/a[i]
b+=(double)(i+1)/a[i]
7.開放したらNullクリア
関数の先頭で引数のNullチェック。
8.有用なコメントを記述する
アルゴリズムとデータ構造を明確にし、処理の概要と目的をある程度まとまった単位で書いておく。
(例)「…の時は…のように動作する」、「本当は…したいのに…理由で…している」
デバックの方法
1.コンパイル時の注意点
gcc xxx.c -0-wallでコンパイルする。
warningはあってもコンパイルは徹がバグに直結するので基本的にゼロになるまで潰していく。
2.分割コンパイルについて