2012年01月15日

C言語の #define や #if に文字列(enum)を使う

C言語のプリプロセッサである #define を使った場合、文字列を定義することはできませんが、enum のように使えば #if の判定文を読みやすくすることができます。

#if 文の == や != の両方にシンボルを使う方が、

 #if USE_printf_to == USE_printf_to_debugger
  :
 #elif USE_printf_to != USE_printf_to_stdout
  :
 #else
  :
 #endif

#if 文の == や != の片方を数値にするより読みやすくなります。

 #if USE_printf_to == 2
  :
 #elif USE_printf_to != 3
  :
 #else
  :
 #endif

そのためには、次のように数値に対してシンボルを定義します。

 #define         USE_printf_to_stdout 1
 #define         USE_printf_to_debugger 2
 #define         USE_printf_to_file 3
 #define USE_printf_to  USE_printf_to_file

ただし、コンパイラの -D オプションを使って #define シンボルを定義する場合、値にシンボルを使うことはできません。 ですから、コンパイラの -D オプションを使わない方がよいです。

数値のままでもソースを調べていけばいずれ分かりますが、スピードが競争力である現在にとっては、そのような数学的な考え方では勝てないでしょう。

sage_p at 22:17│Comments(0)TrackBack(0) プログラミング 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔