コーディングルール

  • 確定次第、固定的なHTMLとしてプロジェクトホームに記載。
  • 新規の修正においては必ずこのルールに従う。
  • 古いコードも順次、修正する。

マクロ

新たな定数マクロは導入しない。

必要な場合は、constで型を明示する。

関数マクロの使用禁止

必要な場合は、関数化する。以下の様なマクロは使用禁止。

  1. #define ADD(x,y) ((x)+(y))

configureの結果によるコンパイル制御用のマクロは定義可能

ただし、事前に相談する。

他のライブラリで定義されたマクロは、その使用目的に合致する場合のみ使用可能

(例)stdlib.hで定義されるEXIT_SUCCESSが0である事を期待して他の用途に使ってはならない。

変数

  1. 変数名を極端に短く省略したり意味のない変数名は禁止
  2. 変数には型に応じた適切な prefix をつける。
  3. 変数宣言部分には、用途などのコメントを入れる。
  4. グローバル変数は原則として使用禁止

prefix(例)

short型s
unsigned short型us
int型i
unsigned int型ui
long型l
unsigned long型ul
char型sz
char *型psz
bool型b

記法

  1. インデントはスペースではなくタブを用いる。
  2. C++のコメント(//)は禁止。
  3. 中括弧{}の対応を一目で分かるように記述。
  4. {}の省略禁止。
  5. { の後は、インデントを必ず増やす。} でインデントを必ず減らす。
  6. 変数宣言部の後には、必ず1行以上、空行を入れる。
  1. int main(int argc, char *argv[])
  2. {
  3. int iCounter; /* ループカウンタ */
  4. for(iCounter=0; iCounter<10; iCounter++)
  5. {
  6. ...
  7. }
  8. return 0;
  9. }

その他

処理が長くなった場合は、関数分割を検討すること。

原則として、1ページに収まらない関数は分割する。

3項演算子

使用を禁止とする。

コンパイルスイッチ

  1. #if 0 や #if 1 は使用禁止。
  2. やむを得ずコンパイルスイッチを用いる場合は、意味のある定義名で #ifdef なり #ifndef すること。

boolian 型以外の判定

明確に2値で定義された型以外で、if ( hoge ) とか if ( !hoge ) のような判定を用いることは禁止。

return文

  1. 1関数につき1箇所であることが望ましい。
  2. インデントが深くなる場合は、この限りにあらず。

goto文

言うまでもないことだが、使用は厳禁

余談

このようにルールを決めても必ず破る人がいます。

そういう人に限って、バグを出したりします。(オマエモナー)

推奨するindentのオプション

indentを使う場合は、コンパイルエラーがでない状態でお願いします。また、typedefなどがある場合は、-Tオプションでindentに教えてやる必要があります。詳細は、indentのmanページを確認願います。

  1. indent -bad -bap -bl -bli0 -lp -npsl -i8 -ss filename.c
-bad宣言ブロック全ての後に必ず空行を置く。
-bapそれぞれの宣言本体の後に必ず空行が置かれる。(関数間の空行)
-bl対応する{}を同じカラムにする。
-bli0{}を余分にインデントしない。
-lp複数行にまたがる文を見やすくする。
-npsl手続きの型を名前と同じ行に置く。(ctagsなどを使う場合は、-pslの方が良い。)
-i8インデントをタブにする。(空白8文字分)
-ss一行で記述した for' 文と while' 文において、セミコロンの前に空白を置く。

ちなみに良く使うオプションは、~/.indent.proというファイルに記述しておくと良い。

-bad -bap -bl -bli0 -lp -npsl -i8 -ss