Cのプリプロセッサの使い方で質問させてください。
(前置きが長いですが、、、)
~経緯~
- 色々なプロジェクトで汎用的に使えるのを、ヘッダーファイルとcppファイルを用意して記述しました。・・・①
- ところが、①を色々なプロジェクトで使おうとすると、①の中で#includeしなければならないファイルが異なってくることに気づく。
例えば、①がx.hとx.cppだとして、プロジェクトAでは、x.cppでhoge.hを追加で#includeしなければならず、しかし、プロジェクトBではhoge.hが必要ない、みたいな感じです。
(いちいち、余計なものを#includeしまくるのはいかがなものか。) - そこで、必要なものだけを#includeできるような記述をしたい!と思い、一番下のコードを書いたのですが、
<2>お行儀が悪いなど、推奨されていない書き方なのではないか
<3>では、どのように書けばいいのか
の3点を疑問に思いましたので、これらについて、お答えいただけると嬉しいです。
(環境、言語はwindow10、VS2015、cppです。)
以下、疑惑のコード
//x.cpp
#include "x.h"
X::X(bool include_hoge){
//include_hoge == trueなら
//_X_INCLUDES_HOGEを定義して
//FUNCをhoge.h内の関数名で定義
//falseなら、別の関数FuncCで定義
if(include_hoge){
#define _X_INCLUDES_HOGE
//class Hogeにあるpublicな関数FuncBで定義
#define FUNC h.FuncB
}
else{
//どこかにある関数FuncCで定義
#define FUNC FuncC
}
}
#ifdef _X_INCLUDES_HOGE
#include "hoge.h"
Hoge h;
#endif
void X::FuncA(){
//云々
FUNC("これで大丈夫?");
//注)FUNCの指す中身は、どちらにせよ似通った関数なので、引数は同じ型と個数になっています。
//云々
}
どうぞ、よろしくお願いしますm(_ _)m