プログラミング技法

C言語でプログラムを作成する場合に参考となる知識,手法等を紹介する.


マクロ

C言語のプログラムは,いくつかの関数定義の集まりとして表わされるが,呼び出される回数が比較的多く,処理すべき内容が少ない機能的に小さいものは,関数化しないでマクロ定義で表現するのが良い.これにより,関数呼び出しの際に要するオーバヘッド時間を節約することができ,実行効率を上げることができる.

汎用マクロ

よく使われる汎用的なマクロを以下に示す.

インクルードガード

ヘッダファイルが他のヘッダファイルをインクルードしても型の再定義エラーが起こらないように,すべてのヘッダファイルの先頭と最後に以下のような記述をする.

#ifndef _H_HEADER_
#define _H_HEADER_
          
// 変数や関数の定義
          
#endif  // _H_HEADER_

これにより,何回インクルードしても最初の1回だけ読み込まれ,再定義エラーにはならない.

デバグ文

デバグメッセージをコード中に埋め込むため

 #ifdef DEBUG
     printf("Debug message\n");
 #endif

がよく用いられる.

しかし,上記のコードは可読性を悪くする.すなわち,移植性を確保するために#defineを行の左端に置くことにより,字下げ(インデント)が乱されてしまう. また,各メッセージを表示するのに3行を使う. これは,以下のようなマクロを使うことにより改善できる.

  #ifdef DEBUG
  #define DBG(x) x
  #else
  #define DBG(x)
  #endif

上記では,DEBUGが定義されていると,DBG(x)というマクロがその引数に展開される. また,DEBUGが定義されていないとマクロDBG(x)はnull文字列になり,DBG(x)が無視されるようになる. マクロの引数は合法的なCの文や式ならば何でもよい. 但し,マクロを起動する文の後にセミコロンを書いてはいけない.セミコロンがあると,マクロがnullに展開された場合,if--elseの対応を狂わせることがある.
例えば,以下のように使用する.

  DBG(printf("Debug start : %d\n", code);)

プログラム技法

プログラムで使われる技法のいくつかを示す.

その他

inserted by FC2 system