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)
还有更好的解决方案吗?
我认为你的问题是你不想在这里使用令牌粘贴.如果您将宏更改为
#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参数粘贴到宏上.
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1882 次 |
| 最近记录: |