プリプロセッサへの#ifdef~#endif命令、または、#ifdef~#else~#endif命令によって、コンパイルする内容を条件分岐させることができる。
#ifdef マクロ名
プログラムコード
#endif
上記のようにマクロ名が定義されている場合、#ifdef~#endifに囲まれた範囲のプログラムコードがコンパイル範囲となる。
これで、マクロの定義によって、コンパイル対象となるプログラムコードを切り替えることができる。
これを「条件付きコンパイル」という。
さっそく、プログラムで例をみてみよう。
なお、本プログラムは、Windows 11 Home(23H2)上で、
Visual Studio Code(1.91.1)を使用して作成し、gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0で コンパイルしている。
//条件付きコンパイルの例
#include <stdio.h>
#define ADDRESS_CHECK
int main(void)
{
int a;
printf("整数を入力してください:");
scanf("%d",&a);
#ifdef ADDRESS_CHECK
printf("この値のアドレスは%pです。\n",&a);
#endif
printf("この値は%dです。\n",a);
return 0;
}
実行結果
整数を入力してください:10
この値のアドレスは0x7ffc7752a824です。
この値は10です。
#ifdef ADDRESS_CHECK~#endifで囲まれたプログラムコードは、ADDRESS_CHECKというマクロ名が定義されているので、コンパイルの対象となっている。
なお、#ifdef~#endif命令の間に#else命令を入れて、さらに分岐させることができる。
#ifdef マクロ名
プログラムコード1
#else
プログラムコード2
#endif
(参考)「C言語 新版 ゼロからはじめるプログラミング」 三谷 純 (著) 翔泳社
コメント