プログラムを書く(コーディングする)書き方には,いろいろな作法(コーディングスタイル)がある.読み易く理解し易くしかも直し易いプログラムのために,次のことを守ること.
ただし,コーディングスタイルには色々なものがあり,以下で述べたものはその中の一つである.もしも他のスタイルの方が気に入っているならばそれでも良いが,他の人が読んで理解し易いように書くという観点からすると,できるだけ一般的なスタイルが望ましい.
何度か使われる同一の定数(配列のサイズなど)がある場合,それらは必ず #define を用いて定義したマクロ定数を用いる.これにより,その定数の意味がはっきりする.なにより,後でその定数の値を変更することが容易になる(そのマクロ定義を書き換えるだけで済む).
#define N 10 main() { int a[N], b[N]; int i; for (i = 0; i < N; i++) a[i] = b[i]; }
マクロは大文字で書き,変数名や関数名は小文字で書く.これにより,それがマクロであるかそうでないかの区別がはっきりする.
#define N 100 main() { int a[N]; int n; n = 10; for (i = 0; i < n; i++) { printf("%d ", a[i]); } }
マクロ名,変数名,関数名には適切な名前をつける. 複数の単語をつなげて一つの名前にするときには,間に _ をはさむか,各単語の先頭文字を大文字にすることで読み易くする. ローマ字では人に見られてみっともないことがあるので,できれば英単語を使って欲しい.
#define MAX_INDEX; int max_index, MaxIndex;
段下げ(行の先頭を右にずらすこと)を確実に行う.これにより,一目見たときに,プログラムの構造が分かりやすくなる.
int function(int x) { int i, j, k; for (i = 0; i < N; i++) { ................; ................; for (j = 0; j < N; j++) { ................; ................; } while (k > 0) { ................; ................; } if (i == 0) { ................; ................; } else { ................; ................; } switch (x) { case 0: ................; ................; case 1: ................; ................; } } }
空白文字および空行を適宜入れる.見やすいプログラムコードのためには,適切な空白が欠かせない.
カンマ ,
セミコロン ;
コロン :
の後
a, b, c, ... a; b; c; ... a: b: c: ...
for, if, while, switch
などの直後の括弧 (...) の前後
for (...) { if (...) { while (...) { switch (...) {
比較演算子 == <= >= !=
や
代入演算子 = += -=
などの前後
if (a == b) { a = b; a += b;
関数名と直後の括弧 (
との間
カンマ,セミコロンの前
int a, b, c; printf("%d", a); for (b = 0; b < 10; b++) {
他の人が見て,プログラムの意味がわかるように,簡潔なコメントを入れる.コメントは,他の人のためだけのものではない.自分が後で読むときにも,もちろんためになる.プログラムを作っているときにも,自分の考えをコメントとして文章にすることにより,自分が何をしたいのか,何をしたら良いのか,このままで良いのか,ということが明白になることが多い.
大域変数(グローバル変数)はできる限り使わない.これは,コーディングスタイルではないが,C言語でプログラミングをするときの大切な心構えである.
関数が必要とするもの,あるいは関数が操作を施すものは,すべて関数の引数として与えるのが原則である.そうすることにより,関数の呼び出しをコーディングしているときに,その関数が何を必要としておりどのような操作を行うのかということが,明瞭となる.(もう少し詳しく)
プログラムが書けないとき,そういうときには,何を作っているのかが分かっていない,ということがよくある.どのようにプログラムを書くか,ということよりも先に,どのようなプログラムを書くのか,ということをきちんと認識しておく必要がある.そのためには,プログラムの仕様書を書くのが一番である.
ある製品の仕様書とは,その製品が何をするためのものか,何ができるのか,どういう性能であるか,どのような使い方をするのかということを,使用者に対して説明するものである.
プログラムや関数の仕様書とは,どのように使えばどのような結果を返してくれるのか,ということを書いたものである.プログラムならば,入力と出力についてのことであり,関数ならば引数と関数値(もしもあれば副作用)についてのことである.プログラムや関数内部で実際にどのように計算しているかという情報は仕様書には必要ない.
他の人に、何かをしてもらうには,何をして欲しいのかを相手が分かるように伝える必要があるのは当然である.プログラミング言語というのは,人間がコンピュータにして欲しいことを伝えるための言語である.しかも,人間同士で話す言葉と違って,ささいな間違いも曖昧な表現も許されない.
そのようなものを学ぶときに心掛ける重要なことは,人間と話すときにもきちんとした言葉(日本語)を使う,ということである.
このようなことに注意しながら,会話をして欲しい.
プログラミングに関しての一番良い参考書は,上級者が書いたきちんとしたプログラムである.そこには,見習うべきコーディングスタイル,なるほどと思わせるプログラミングテクニックがある.
自分の書いたプログラムを積極的に他人に公開する.そうすれば,良いアドバイスをもらえるかも知れない.なにより,見られて恥ずかしいようなプログラムを作らないようになる.