预处理器宏GCC:粘贴x和x不会提供有效的预处理令牌

Soc*_*Kid 6 c gcc string-concatenation stringification c-preprocessor

#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));
Run Code Online (Sandbox Code Playgroud)

这个宏在VS编译器中工作正常,但不能在GCC编译器上编译:

错误:错误:粘贴"/"和"includefile"不提供有效的预处理令牌

对于某些包含文件,它会给出错误:

错误:粘贴"includefile"和"." 不提供有效的预处理令牌

小智 2

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