C/C++プログラミング入門 – マクロとは

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

不定期に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++におけるマクロについてどういうものかについて説明を行った。実際のマクロの使い方についてはまたの機会に行ってみたい。

タイトルとURLをコピーしました