チームでプログラムを作成する場合、メンバーがプログラムを読み易いように、 インデンテーション(字下げ)に関して一定のルール(約束事)を設ける。
「プログラミング」では、 課題で提出するプログラムのインデンテーションに関して次のような約束事を採用する。 (5番目の約束事以外は、 教科書で採用されている約束事と概ね同じである。)
原則として、一行には文は一つしか書かない。 ただし、次の例のように密接に関連している文の場合はこの原則にこだわる必要はない。
プロンプト(入力をうながすメッセージ)を出力する printf 文と scanf 文
関連する変数への代入文
ブレース({ 〜 })の中は、外よりも 4 または 8 字分を字下げする。 ただし、首尾一貫した文字数であれば、4 や 8 という数字にこだわる必要はない。(1 字は少なすぎるが …)
ただし、case 〜: や default: などのラベルは字下げしない。(または、通常の半分程度字下げする。)
タブ文字を使わずに空白文字だけで字下げする。 あるいは空白文字を使わずにタブ文字だけで字下げする。 (つまり、空白文字とタブ文字を混ぜない。)
エディタの設定で、「タブをスペースに変換して挿入」というチェック項目が大抵のエディタにあるはず。 (MkEditor の場合、 VxEditor の場合)
タブ文字を使った場合は、8 字分の空白と解釈する。
自分の使っているエディタでタブの設定方法がわからない場合は、 ソースファイルを「メモ帳」または Web ブラウザで開いて確認する。
開きブレース({)は if や else, switch, do, while, for などのキーワードと 同じ行に改行せずに書く。開きブレースのあとは何も書かず改行する。
閉じブレース(})は if や switch, do, while, for などのキーワードのはじめの文字と列をそろえて書く。 その行には閉じブレース以外には何も書かない。
ただし、else … や do 〜 while 文の while … は閉じブレース(})と同じ行に続けて書く。
良い | 悪い |
if (n1 > n2) { max = n1; } else { max = n2; } |
if (n1 > n2) {
max = n1;
}
else {
max = n2;
}
|
do { printf("%d ", n++) ; } while (n < no); |
do {
printf("%d ", n++) ;
}
while (n < no);
|
if 文, if 〜 else 文 や for 文, while 文, do 〜 while 文などでは、 選択されたり、繰り返したりされる文が一つだけの場合も、 ブレース({〜})に囲む。
この約束事だけは、 教科書のプログラム例は必ずしもそうなっていないので、 特に注意する。
良い | 悪い |
if (n1 > n2) { max = n1; } else { max = n2; } |
if (n1 > n2) max = n1; else max = n2; |
while (n1 < n2) { printf("%d ", n1++); } |
while (n1 < n2) printf("%d ", n1++); |
ただし、else のあとにすぐ一つの if 文が続く else if … というかたちは、 else { if … } とはしない。
例外的に、とても短い文で敢えてブレースに囲まない場合は、改行せず、 if, while などと同じ行に書く。
max = n1; if (n2 > max) max = n2; if (n3 > max) max = n3;
関数の定義は1列めから書きはじめる。
関数本体の開始を表す開きブレース({)は、関数頭部のあとに続けて改行せずに書くか、
改行して 1 列めに書く。
関数本体の最後を表す開き閉じブレース(})は、1 列めに書く。
(コメントの中の数字は、上記の約束事の番号)
4 字の字下げを採用した場合
int main(void) { /* ← 6, 次の行の1列目でもよい */ int i, j; /* ← 1 */ for (i = 0; i < 10; i++) { /* ← 3 */ for (j = 0; j < 10; j++) { /* ← 1 */ printf("*"); /* ← 5 */ } /* ← 4 */ printf("\n"); /* ← 1 */ } /* ← 4 */ return 0; /* ← 1 */ } /* ← 6 */
8 字の字下げを採用した場合
int main(void) { /* ← 6, 前の行でもよい */ int i, j; /* ← 1 */ for (i = 0; i < 10; i++) { /* ← 3 */ for (j = 0; j < 10; j++) { /* ← 1 */ printf("*"); /* ← 5 */ } /* ← 4 */ printf("\n"); /* ← 1 */ } /* ← 4 */ return 0; /* ← 1 */ } /* ← 6 */