マクロに関する記事です。
関数のように使用する方法も解説しています。
マクロとは?
プログラムのコンパイル前に、プリプロセッサが処理するコードのことをマクロと言います。
マクロは通常【#】を使って記述します。
プリプロセッサ等に関しては、上記の記事で解説しています。
#define
【#define】は、文字を特定の値に置換するマクロです。
記述する際は、最後尾にセミコロンを記述しません。
また、置換される側の文字列は大文字にすることが多いようです。
#define マクロ名 ○○
また、次のように記述すると、『DEBUG_MODEが定義されている』という意味を表します。
#define DEBUG_MODE
コーディング例①
#include <stdio.h> // printf()を使用するために必要
#define TEST 5
int main()
{
printf("%d\n", TEST);
return 0;
}
出力
5
引数付きマクロ
【#define】に引数を付けることで、関数のような機能を持ったマクロを定義することが出来ます。
#define マクロ名(引数) (処理)
コーディング例①
#include <stdio.h> // printf()を使用するために必要
#define TEST(x, y) ((x)-(y))
int main()
{
printf("%d\n", TEST(2, 3));
printf("%d\n", TEST(2 + 3, 4 + 5));
return 0;
}
出力
-1
-4
コーディング例②
処理の書き方によって、計算値が変わってしまうので、注意が必要です。
#include <stdio.h> // printf()を使用するために必要
#define TEST(x, y) (x-y)
int main()
{
printf("%d\n", TEST(2, 3));
printf("%d\n", TEST(2 + 5, 3 + 5));
return 0;
}
出力
-1
9
コーディング例③
改行したい場合は、【\】を使用します。
#include <stdio.h> // printf()を使用するために必要
#define TEST(x, y) ((x)-(y) \
+ 5)
int main()
{
printf("%d\n", TEST(2, 3));
printf("%d\n", TEST(2 + 5, 3 + 5));
return 0;
}
出力
4
4
#if
【#if】は、条件が真の場合に、指定範囲をコンパイルの対象に含めるマクロです。
#if 条件
指定範囲
#endif
#define DEBUG_MODE 1
#if DEBUG_MODE
// DEBUG_MODE が真の場合にコンパイルされる
#endif
#ifdef
【#ifdef】は、指定したマクロが定義されている場合に、指定範囲をコンパイルの対象に含めるマクロです。
#ifdef 識別子
指定範囲
#endif
#define DEBUG_MODE
#ifdef DEBUG_MODE
// DEBUG_MODEが定義されている場合にコンパイルされる
#endif
#ifndef
【#ifndef】は、指定したマクロが定義されていない場合に、指定範囲をコンパイルの対象に含めるマクロです。
同じヘッダファイルを重複して組み込んでしまうことを防ぐために使用されることが多いです。
#ifndef 識別子
指定範囲
#endif
#ifndef DEBUG_MODE
// DEBUG_MODEが定義されていない場合にコンパイルされる
#endif
