2017-08-23 10 views
1

component.h.gencomponent.hに含めたいと思います。プリプロセッサ時間に__FILE__を追加して結果を含める方法

__FILE__#includeと使用することができ、ヘッダーガードがないと再帰的にインクルードすることになります。

C文字列リテラルを追加して結果を含める方法はありますか?これは私がこれまで試したものです:

#define CAT_IMPL(s1, s2) s1##s2 
#define CAT(s1, s2) CAT_IMPL(s1, s2) 
#define DO_IT CAT(__FILE__, ".gen") 

#include DO_IT 

しかし、これは自分自身を含むファイルと同じ再帰につながる - ".gen"部分が使用されていない - と私はMSVCでこの警告が出ます:

プリプロセッサディレクティブ次の予期しないトークン - 予想改行

のgcc /打ち鳴らす/ MSVCで動作するソリューションがあります:

警告C4067?

何千ものファイルではないにしても、これを数百に使用する予定で、同じコードをコピーして貼り付けて生活を単純化したいと考えていることに注意してください。

+0

downvoters - please please ... – onqtam

答えて

3

は残念ながら、これは不可能である。

  • __FILE__は、文字列に展開します。文字列を元に戻すことはできません。文字列の「残りの部分」を追加し、結果を文字列化するという手法は使用できません。
  • 2つの文字列トークンを貼り付けても、有効なトークンは作成されません。貼り付けはできません。
  • プリプロセッサの文字列連結が存在しません(プリプロセッサは変換フェーズ4、文字列リテラル連結はフェーズ6)。
+0

私が付けることができないという残念な点は、ヘッダーファイルとソースファイルのみで定義されています(ただし、意味があります...) - そうでなければ、私のビルドシステムでこれをシミュレートできます... – onqtam

+0

ビルドシステムはオープンです。あなたはインクルードファイルを生成するために単に別のツールを使うことができます。 –

0

種類は分かりませんがgccで可能です。この質問の答え秒で

ルック:

C Macro - DynamiC#include

+0

あなたは '__FILE__'を解体できないので、この質問は関係ありません。 –

関連する問題