マクロ定数

この投稿では、マクロ定数について説明します。

まず、プリプロセッサについて簡単に説明します。プリプロセッサは、プログラムのコンパイル前に実行され、#で始まるプリプロセッサディレクティブを処理します。たとえば、#defineなどがそれにあたります。

#defineは、ある文字列(名前)を定数の値に置き換える命令です。これを使って定義された定数のことを「マクロ定数」と呼びます。

たとえば、次のように定義した場合:

#define MAX_USERS 100

このあとプログラム中で MAX_USERS と書けば、プリプロセッサがそれを 100 に置き換えてくれます。これにより、コードの意味が分かりやすくなり、値を一箇所で管理できるようになります。

次にマクロ定数を使う目的を説明します。

可読性の向上

定数の意味を分かりやすくするために使います。

#define iPI  3.14159

double area = iPI * r * r;

保守性の向上

同じ値を複数個所で利用する場合、定義を変更するだけで済みます。

#define iBUFF_SIZE  128
unsigned char BUFF[iBUFF_SIZE]

    for( i=0 ; i<iBUFF_SIZE ; i++ )
    {
            sum = sum + BUFF[i]:

意味が分かりにくい数値の排除

数値の意味が分かりにくい場合、マクロ定数でラベル名で意味を分かりやすくします。

#define iSECOND_IN_A_DAY  60 * 60 *24 /* 86400s/Day */

  if( s < iSECOND_IN_A_DAY )
  {

条件付きコンパイルに仕様

プログラムコードを条件付きコンパイルで切り替えるときに使用します。

#define iTEST  1                 /* Debug SW 0:OFF 1:ON */

#ifdef iTEST == 1
    printf( "integer: %d", x); /* Debug Code */
#endif
OSS-ECAL Japanese
error: コンテンツは保護されている