= コーディングルール
* 確定次第、固定的なHTMLとしてプロジェクトホームに記載。
* 新規の修正においては必ずこのルールに従う。
* 古いコードも順次、修正する。
== マクロ
=== 新たな定数マクロは導入しない。
必要な場合は、constで型を明示する。
=== 関数マクロの使用禁止
必要な場合は、関数化する。以下の様なマクロは使用禁止。
{{{ code c
#define ADD(x,y) ((x)+(y))
}}}
=== configureの結果によるコンパイル制御用のマクロは定義可能
ただし、事前に相談する。
=== 他のライブラリで定義されたマクロは、その使用目的に合致する場合のみ使用可能
(例)stdlib.hで定義されるEXIT_SUCCESSが0である事を期待して他の用途に使ってはならない。
== 変数
1. 変数名を極端に短く省略したり意味のない変数名は禁止
1. 変数には型に応じた適切な prefix をつける。
1. 変数宣言部分には、用途などのコメントを入れる。
1. グローバル変数は原則として使用禁止
=== prefix(例)
||short型||s||
||unsigned short型||us||
||int型||i||
||unsigned int型||ui||
||long型||l||
||unsigned long型||ul||
||char型||sz||
||char *型||psz||
||bool型||b||
== 記法
1. インデントはスペースではなくタブを用いる。
1. C++のコメント(//)は禁止。
1. 中括弧{}の対応を一目で分かるように記述。
1. {}の省略禁止。
1. { の後は、インデントを必ず増やす。} でインデントを必ず減らす。
1. 変数宣言部の後には、必ず1行以上、空行を入れる。
{{{ code c
int main(int argc, char *argv[])
{
int iCounter; /* ループカウンタ */
for(iCounter=0; iCounter<10; iCounter++)
{
...
}
return 0;
}
}}}
== その他
=== 処理が長くなった場合は、関数分割を検討すること。
原則として、1ページに収まらない関数は分割する。
=== 3項演算子
使用を禁止とする。
=== コンパイルスイッチ
1. #if 0 や #if 1 は使用禁止。
1. やむを得ずコンパイルスイッチを用いる場合は、意味のある定義名で #ifdef なり #ifndef すること。
=== boolian 型以外の判定
明確に2値で定義された型以外で、if ( hoge ) とか if ( !hoge ) のような判定を用いることは禁止。
=== return文
1. 1関数につき1箇所であることが望ましい。
1. インデントが深くなる場合は、この限りにあらず。
=== goto文
言うまでもないことだが、使用は厳禁
== 余談
このようにルールを決めても必ず破る人がいます。
そういう人に限って、バグを出したりします。(オマエモナー)
=== 推奨するindentのオプション
indentを使う場合は、コンパイルエラーがでない状態でお願いします。また、typedefなどがある場合は、-Tオプションでindentに教えてやる必要があります。詳細は、indentのmanページを確認願います。
{{{ code sh
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