この投稿では、マクロ定数について説明します。
まず、プリプロセッサについて簡単に説明します。プリプロセッサは、プログラムのコンパイル前に実行され、#で始まるプリプロセッサディレクティブを処理します。たとえば、#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