#ifdef 〜 #else 〜 #endif


目次に戻る


関数ネタがちょっと思いつかないので、Cプログラミングで欠かせない小細工を一つ紹介 します。
#ifdef 〜 #else 〜 #endif は条件コンパイルと呼ばれるもので次のように使います。
#ifdef MAIN
/* MAIN が #define してあったらここの部分がコンパイルされる。#define されていなかったらここの部分は無視される */
#else
/* MAIN が #define されていなかったらここの部分がコンパイルされる。#define してあったらここの部分は無視される */
#endif
C言語のif 〜 else と同様に、#else は必要がなければ書かなくてもOKです。
 
さて、一見すると何に使うのかと疑問に思うと思いますので具体例を一つ紹介しまし ょう。
次のヘッダファイルはグローバル変数を効率よく定義&extern宣言しています。
/* global.h */
#ifdef MAIN
#define    EXTERN
#else
#define    EXTERN    extern
#endif

EXTERN int gData;
EXTERN int gData2;
EXTERN char *gFileName;

このヘッダファイルをどのように活用するかというと、次のようにします。
/* main.c */
/* グローバル変数を定義する */
#define    MAIN
#include "global.h"
    :
    :

/* sonota.c */
/* グローバル変数はexternで宣言する */
#include "global.h"
    :
    :

内部でどのような処理がされるかわかりますか?
どうしてこれでグローバル変数が定義&extern宣言できるのかはみなさん考えてくだ さい。


目次に戻る