一般的なプログラミング言語には、プログラムを書くときの 書式上のルールが厳格に定められているものが多く存在する。たとえば 機械語1対1に対応したアセンブリ言語 では、プログラムでは 1行に1文しか書いてはいけないことになっている。
1: ;; Sample Assembly Code 2: mov ax, bx 3: mul ax, cx
また、Fortranでは、プログラムを書くことができる桁位置まで 決められている。
(↑これらは覚えなくて良い)
10 20 30 40 50 60 70 1-----7---+---------+---------+---------+---------+---------+---------+----- CCCCCC この行は全部コメント CCCCCC PROGRAM MAIN WRITE(*,10) 'Hello, world' 10 FORMAT(A) STOP END
C言語は、1行にどれだけ書いても構わない フリーフォーマット の 文法となっている。したがって、このようなへんてこりんな書き方も許される。
#include <stdio.h> int main/*やー*/(){puts (/*うっそーん*/"Hello, world" ) ; }
しかしこれでは読みづらい。フォーマットが自由であればこそ、 読みやすいスタイルで書くことが求められる。
スペースの空け方、括弧の置き方など、色々な流儀があるが、 統一の取れたスタイルは読みやすい。以下のルールは、その数ある流儀の中の 一例である。
Emacsであれば全ての行で [Tab] キーを押すことで 自動的に揃えられる。
if (x > 4) { x = 0; printf("foo\n"); }
揃えることで if, while, for
などの制御構文がどこか
ら始まりどこで終わっているかが視覚的に理解できる。
if, while, for, do
の直後の条件式の前には
スペースを1ついれる。
while (x > 0) {
printf("あと%d秒\n", x);
x--;
}
一般関数の後の引数リストの開き括弧はスペースを空けない。
printf("Hello!");
引数くぎりなどのカンマの後には1つスペースを入れる。 上の行とインデントを合わせる場合などは二つ以上入れるのも良い。
double foo; float x; sscanf(buffer, sizeof buffer, stdin);
一般的に空白を多めにするとスッキリして見やすくなるが、入れすぎると どこが大事なのかがつかみにくくなる。とくに括弧の内側は 中に数式を入れることが多いので、数式を分かりやすくするためには 括弧の内側には空白を入れない方が良い。
× …… if ( x < 5 ) { } ○ …… if (x < 5) { } ○ …… if (x<5) { } × …… x[ MAX_NINZ ] ○ …… x[MAX_NINZ]
上記のルールはどれも絶対守らないといけないという性質のものではないが、 良いプログラムを作れる人は、自然と上記のような綺麗な書き方になっている ものである。