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之间的 Macro ## concatenation operator 的差异#连接

您可以尝试(和#include STRINGIFY(PATH FILNAME.h)之间缺少空间很重要)——这对我来说适用于 gcc 4.6.3。FILNAME.h

于 2013-10-07T15:49:15.310 回答