【发布时间】:2011-06-07 18:08:01
【问题描述】:
#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”和“.”没有给出有效的预处理令牌
【问题讨论】:
-
与
##运算符的连接不适用于GCC 中的"foo"等字符串文字。你到底想用这个宏做什么? -
你有没有找到一个可接受的答案来解决这个问题?
-
有趣。我希望两者都会给出像
unable to find include file "CONCATTHREE(PATH ,FILNAME ,.h)"这样的错误,这实际上是我通过 gcc 运行您的代码时看到的...
标签: c gcc c-preprocessor string-concatenation stringification