我在使用以下宏时遇到麻烦,并且发现 token 粘贴操作符(##)正在吞噬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() { }

有更好的解决方案吗?

最佳答案

我认为您的问题是您不想在这里使用 token 粘贴。如果将宏更改为

#define MY_FUNCTION(aReturnType) static aReturnType MyFunction() { }

那如果你写
MY_FUNCTION(bool)

它将扩展为
static bool MyFunction() { }

我假设这是您要执行的操作,因为看不到您正在尝试将aReturnType参数粘贴到宏上的内容。

希望这可以帮助!

关于c++ - token 粘贴运算符(##)正在占用我的C++宏中的空格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8994169/

10-11 16:27