不定期にC/C++プログラミング入門を行っているが、今回はC/C++で必ずと言っていいほど使われている「マクロ」について説明を行いたい。マクロはC/C++プログラミングでは必須事項の一つでもあるので、ぜひ覚えておきたい。
C/C++におけるマクロとは
C言語におけるマクロとは、以下のようなことをするために行われる実際のコードをコンパイルする前にコードを置き換えるものである。主に以下のような用途に使われる。
- ヘッダーファイルをインクルードする
- 特定の文字列を別の文字列や数値などに置き換える
- 特定の処理をコンパイル時に除外する
- その他もろもろ
マクロの使用例
以下のコードでは、他のファイルをインクルードするという処理と、定数としてマクロを使っている。
#include <stdio.h> // <- 入出力関連のヘッダーファイルをインクルードする
#include <stdlib.h> // <- 標準ライブラリー関連のヘッダーファイルをインクルードする
#define TOTAL_NUM 10 // <- TOTAL_NUMを10に置き換える
int main(void) {
printf("total num: %d\n", TOTAL_NUM);
return EXIT_SUCCESS;
}
出力
total num: 0
解説
上記のコードにおいて、各行の始まりが#
になっているものがマクロ構文である。
上記のコードでは#include
と言うヘッダーファイルを読み込んで展開するマクロ処理と、#define
で特定の文字列を別の文字列あるいは数値に置き換えたりするという処理をコンパイル前に行っている。
なお、return EXIT_SUCCESS;
のEXIT_SUCCESS
も、実際にはstdlib.hで定義されているマクロで、実際には0
が定義されている。
なお、ここでは説明を行っていないが、マクロには他には#ifdef XXX
〜#endif
(〜が定義されているのであれば)、#ifndef
〜#endif
(〜が定義されていないのであれば)、#if XXX
〜#endif
(〜であれば)、#pragma
などがある。これらについてはここでは割愛するが、後ほど機会があれば詳しく説明を行いたい。
これらは実際のコンパイルではなく、コンパイルの前のプリプロセスと呼ばれるコードの置き換え処理で変換されるため、実際のコード・処理ではおいづらくなることがあるので使い方は気をつけたいところである。
最後に
今回はC/C++におけるマクロについてどういうものかについて説明を行った。実際のマクロの使い方についてはまたの機会に行ってみたい。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。