コードの中でよく使う「マクロ(#define)」とは?C言語の基本をやさしく解説!
C言語では、#define
を使って定数や簡単な処理の置き換えを行うことができます。
これをマクロ(macro)と呼び、コードの見やすさや保守性を高めるのに役立ちます。
#define の基本
#define 名前 置き換える内容
プログラムがコンパイルされる前に、「名前」を「内容」に置き換える機能です。
例:
#define PI 3.14159
int r = 5;
float area = PI * r * r;
上記では、PI
が 3.14159
に置き換えられてからコンパイルされます。
マクロの用途@:定数の定義
#define MAX_LENGTH 100
#define TAX_RATE 0.1
- 魔法の数字(マジックナンバー)を避けて読みやすくする
- 値を変更したいときも1か所で済む
マクロの用途A:簡単な関数風マクロ
#define SQUARE(x) ((x) * (x))
SQUARE(5)
→ ((5) * (5))
に置き換わり、結果は 25。
※ 括弧を忘れると予期せぬ動作になるので注意!
マクロの注意点
- 型がない(全てテキスト置換)
- 関数マクロでは括弧を正しく使わないとバグの原因になる
const
で定数を定義する方が安全な場合もある
使用例
#include <stdio.h>
#define PI 3.14
#define AREA(r) (PI * (r) * (r))
int main(void) {
int radius = 5;
float a = AREA(radius);
printf("半径 %d の円の面積は %.2f\n", radius, a);
return 0;
}
条件付きコンパイルに使うマクロ
#define DEBUG
#ifdef DEBUG
printf("デバッグ情報\n");
#endif
特定のマクロが定義されている場合だけコードを有効にする「条件付きコンパイル」も可能です。
まとめ
マクロ(#define)は、コンパイル前にコードを置き換える仕組みで、定数定義や簡易関数に便利です。
使い方を誤ると予期せぬバグを生むこともあるため、特に関数風マクロでは括弧をしっかり使うようにしましょう。
初心者の方は、まずは定数マクロから使ってみるのがおすすめです!