令牌粘贴操作符(##)正在我的C++宏中占用空格

M. *_*ley 1 c++ macros concatenation c-preprocessor

我在使用下面的宏时遇到了问题,我发现令牌粘贴的operator(##)正在占用它们之间的空间static和返回类型:

#define MY_FUNCTION(aReturnType) static ##aReturnType MyFunction() { }
Run Code Online (Sandbox Code Playgroud)

所以预处理器正在转变:

MY_FUNCTION(bool)
Run Code Online (Sandbox Code Playgroud)

进入这个:

staticbool MyFunction() { }
Run Code Online (Sandbox Code Playgroud)

这导致了奇怪的编译错误.

我提出了在static关键字周围添加括号的想法:

// This works but is kind of weird
#define MY_FUNCTION(aReturnType) (static) ##aReturnType MyFunction() { }
Run Code Online (Sandbox Code Playgroud)

还有更好的解决方案吗?

tem*_*def 8

我认为你的问题是你不想在这里使用令牌粘贴.如果您将宏更改为

#define MY_FUNCTION(aReturnType) static aReturnType MyFunction() { }
Run Code Online (Sandbox Code Playgroud)

如果你写的话

MY_FUNCTION(bool)
Run Code Online (Sandbox Code Playgroud)

它会扩展到

static bool MyFunction() { }
Run Code Online (Sandbox Code Playgroud)

我假设这是你想要做的,因为我无法看到你试图将aReturnType参数粘贴到宏上.

希望这可以帮助!