1

次のスニペットは、PROJECT (Makefile で定義) の値を取り、インクルード ファイル名を作成することになっています。たとえば、PROJECT=classifier の場合、最後に PROJECTINCSTR の classifier_ir.h を生成する必要があります。

サフィックスにアンダースコアを使用しない限り、このコードは機能することがわかりました。ただし、アンダースコアの使用はオプションではありません。コード ベースではあらゆる場所でアンダースコアが使用されています。PROJECT の値の数は限られているため、これを回避できますが、アンダースコアを使用して次のスニペットを実際に機能させる方法を知りたいです。逃れることはできますか?

#define PROJECT classifier

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)

#include PROJECTINCSTR

編集: コンパイラは、PROJECT_ir.h ではなく、classifier_ir.h を含めようとする必要があります。

4

3 に答える 3

7
#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define SMASH(x,y) x##y
#define MAKEINC(x) SMASH(x,_ir.h)
#define PROJECTINC MAKEINC(PROJECT)
#define PROJECTINCSTR MAKESTR(PROJECTINC)
于 2008-09-26T20:55:52.770 に答える
1

これは私のために働く:

#define QMAKESTR(x) #x
#define MAKESTR(x) QMAKESTR(x)
#define MAKEINC(x) x ## _ir.h
#define PROJECTINC(x) MAKEINC(x)
#define PROJECTINCSTR MAKESTR(PROJECTINC(PROJECT))

#include PROJECTINCSTR
于 2008-09-26T21:02:35.640 に答える
0

そのベアボーンの例は gcc (v4.1.2) で動作し、「PROJECT_ir.h」をインクルードしようとします

于 2008-09-26T20:54:12.087 に答える