我在使用以下宏时遇到问题,我发现令牌粘贴操作符(##
)占用了static
和返回类型之间的空格:
#define MY_FUNCTION(aReturnType) static ##aReturnType MyFunction() { }
所以预处理器正在转变:
MY_FUNCTION(bool)
进入这个:
staticbool MyFunction() { }
导致奇怪的编译错误。
我提出了在static
关键字周围添加括号的想法:
// This works but is kind of weird
#define MY_FUNCTION(aReturnType) (static) ##aReturnType MyFunction() { }
有没有更好的解决方案?
答案 0 :(得分:8)
我认为你的问题是你不想在这里使用令牌粘贴。如果您将宏更改为
#define MY_FUNCTION(aReturnType) static aReturnType MyFunction() { }
然后,如果你写
MY_FUNCTION(bool)
它会扩展到
static bool MyFunction() { }
我假设这是您想要做的,因为我无法看到您尝试将aReturnType
参数粘贴到宏上。
希望这有帮助!
答案 1 :(得分:3)
应该怎么做?您告诉它将static
和bool
粘贴在一起。如果你不想要那个而你想要static bool
,那么不要将它们粘贴在一起?