C++ Builder > IDE > [ファイル]-[使用するユニット]でincludeする位置をコントロールする > #ifdef使用


動作確認
C++ Builder XE4

IDEの標準機能として、メニューの[ファイル]-[使用するユニット]を使うことで、ソースもしくはヘッダファイルに#include "Unit2.h"などを追加できる。

通常の追加

Unit1.cpp
#include "Unit1.h"
#include "Unit2.h"

[ファイル]-[使用するユニット]にてUnit3.hを追加すると以下となる。

Unit1.cpp
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"

追加場所のコントロール

こちらは、IDEを使っている中で偶然見つけた機能。

Unit1.cpp
#include "Unit1.h"

#define DEBUG_XXX
#ifdef DEBUG_XXX
#include "Unit2.h"
#endif

[ファイル]-[使用するユニット]にてUnit3.hを追加すると以下となる。

Unit1.cpp
#include "Unit1.h"
#include "Unit3.h"

#define DEBUG_XXX
#ifdef DEBUG_XXX
#include "Unit2.h"
#endif

どうも#ifdefで囲われたincludeは最後尾とみなさないようだ。

使いどころ

Productionとしての#includeと一時的な#includeを並べた時に、[ファイル]-[使用するユニット]ではProductionコード側にincludeするようにする、などに使えるかもしれない。

Unit1.cpp
// Production code
#include "ScreenUtil.h"
#include "UdpUtil.h"
#include "Unit1.h"
//    <<--- ここに追加される

#define DEBUG_XXX
#ifdef DEBUG_XXX
#include "DebugScreen.h"
#include "DebugUdpComm.h"
#endif

開発を進める中で、デバッグ用includeが並んだ後にProduction用includeが間に並んでしまい、出荷前に整理する、というのを何回が実施してきた経緯がある。

#ifdefの記載の意図が分かりやすいかどうかの問題はある。

気づいた事項 (2016/12/04)

  • 誤: #ifdefで囲った部分は無視される
  • 正: #ifdefの行以降は無視される

何が違うかというと、後者の場合、#ifdef ...#endifの後にincludeしたものがあったとしても、「その下に追加されず、#ifdefの前に追加される」ことになる。