6
#define  PATH  "yagh/headers/"
#define  FILNAME  "includefile"


#define CONCAT(a__, b__) CONCAT_DO(a__, b__)
#define CONCAT_DO(a__, b__) a__##b__
#define CONCATTHREE(a__, b__, c__) CONCAT(CONCAT(a__, b__), c__)
#define STRINGIFY(a__) #a__


#include STRINGIFY(CONCATTHREE(PATH  ,FILNAME  ,.h));

このマクロは VS コンパイラでは問題なく動作しますが、GCC コンパイラではコンパイルされません。

エラー: エラー: "/" と "includefile" を貼り付けても、有効な前処理トークンが得られません

一部のインクルード ファイルでは、エラーが発生します。

エラー: 「includefile」と「.」を貼り付けています。有効な前処理トークンを与えません

4

1 に答える 1

1

GCC は、C 標準の適用において少し厳格になっています。Visual-C++ と gcc 間のマクロ ## 連結演算子の違いhttp://gcc.gnu.org/onlinedocs/gcc-4.3.3/cpp/Concatenation.htmlを参照してください。 #連結

試してみてください( と の間に#include STRINGIFY(PATH FILNAME.h)スペースがないことが重要です) -- これは gcc 4.6.3 で動作します。FILNAME.h

于 2013-10-07T15:49:15.310 に答える