Next: , Previous: Comments, Up: Writing C


5.3 Cの構成のきれいな利用

関数への全ての引数を明示的に宣言してください。それらが単にintだか らという理由で省いていけない。

外部関数とソースファイルの後ろに現れる関数の宣言は、ファイルの先頭の近く 一箇所か、ヘッダファイルの中に書くべきだ。関数の中にextern宣言を 置いてはいけない。

以前、一つの関数内で繰り返し繰り返し異なる値のために(temのような 名前で)同じ局所変数を使うのが普通のやり方だった。こうする代わりに、別の 目的毎に別の局所変数を宣言し、意味のある名前を付ける方がより良い。これで プログラムがより理解しやすくなるだけでなく、良いコンパイラの最適化を促進 するのである。また、局所変数の宣言をそれぞれ、それを全て使用する一番小さ い領域に入れることができる。こうすると、プログラムがさらにきれいになるの だ。

大域識別子を隠す局所変数や引数を使ってはならない。

複数行に及ぶ一つの宣言で複数の変数を宣言してはいけない。代わりに、それぞ れ行で新しく宣言を始めなさい。例えば、こうする代わりに、

     int    foo,
            bar;

こう書くか、

     int foo, bar;

あるいは、こうする。

     int foo;
     int bar;

(もしそれらが大域変数なら、いずれにせよその前にコメントを付けるべきだ。)

他のif文に入れ子になるif-else文があるとき、必ずその if-elseの周りに大括弧を付ける。従って、次のように決して書 いてはならない。

     if (foo)
       if (bar)
         win ();
       else
         lose ();

常に次のようにする。

     if (foo)
       {
         if (bar)
           win ();
         else
           lose ();
       }

もしelse文の中に入れ子になるif文があれば、次のように、 then部分をその前のthen部分のように字下げして一行に else ifを書くか、

     if (foo)
       ...
     else if (bar)
       ...

あるいは、次のように大括弧の中に入れ子のifを書く。

     if (foo)
       ...
     else
       {
         if (bar)
           ...
       }

同じ宣言で、構造体のタグや変数、typedefを一緒に宣言してはならない。代わ りに、構造体のタグを別に宣言して、それから変数やtypedefを宣言する。

if条件文内で代入しないようにしなさい。例えば、こう書いてはいけ ない。

     if ((foo = (char *) malloc (sizeof *foo)) == 0)
       fatal ("virtual memory exhausted");

代わりに、こう書く。

     foo = (char *) malloc (sizeof *foo);
     if (foo == 0)
       fatal ("virtual memory exhausted");

lintをおとなしくするのに、プログラムを見苦しくしてはならない。 voidへのキャストを入れないでください。キャストなしのゼロは、可変 引数の関数を呼ぶときを除くと、ヌル・ポインタ定数として全く結構である。