C++ スタイル

プログラムを公開するので,c++ のスタイルについても少し考えてみる.C++ Coding Standard は英語で長く読む気が起きないので,Google C++ Style の日本語訳を眺める.気になったのは以下 (注: 括弧内は自分のコメント).

  • 前方宣言で十分なときには、#include を使ってはいけない.
  • インクルードの順序は Cライブラリ、C++ライブラリ、その他のライブラリの.h、プロジェクトの.h (c, c++ はごっちゃになってる直さねば)
  • struct はデータを運ぶ受動的なオブジェクトのみ,その他は class (大体そういう感じにしてる).
  • 簡潔な関数を書く (40行程度が望ましいそうだ.Emacs のデフォルトで1画面に収まる程度を目安にしている.読み易さより,全体の行数の短さを重視するので,二度以上呼ばれる手続きだけ関数にしてる.しかし200行とかある関数は何とかしたい).
  • cpplint.py を使う (-Weffc++ もそうだけど,結局全部は直せなくて orz)
  • 参照渡しのパラメータにはすべて、const を付けなければならない (入出力ほとんど参照なので無理)
  • ストリームはログ記録のためだけに使うこと (普通の IO に使うにはオーバーヘッドが無視できないのでほとんどログにしか使っていない).
  • 整数型は int だけ使う (short などは直した方が良さげ.シフト演算の関係で,unsigned int は避けられないけど).
  • 整数には 0 を、実数には 0.0 を、ポインタには NULL を、文字には '\0' を使うこと (前はそうしてたけど,今は全部 0)
  • 一般的な命名規則: 省略は避ける (変数名があまり長くなると,文字数が多くなって場合によっては関数全体の見渡しが悪くなるので積極的に省略)
  • クラスメンバ変数は末尾に_ (private なメンバ変数/関数は,_ を前値修飾で入れてるので逆)
  • コードにおけるテキスト1行の長さは、長くても80文字 (これが昔からの標準とのこと)
  • public、protected、private の各セクションはこの順序で (private -> public / protected の順にしてる)
  • 水平方向の空白 (<> や () の外には基本的に常に入れてる)
  • 垂直方向の空白は最小限 (関数が複数の部品を含むときは空行を入れてる)